2012-03-25 17 views
1

自分のGUIにボタンのサイズを同じにしようとしています。しかし、setPreferredSize()を呼び出すたびに、Nimbusは自動的にいくつかのボタンの高さを設定しているようです。 Nimbusですべてのボタンのサイズ(幅と高さ)を同じにするにはどうすればいいですか?次のサンプルコードで、最初の行のボタンの高さは正しいですが、幅は正しくありません。 2番目の行では、幅は正しいが、高さは正しくありません。どのボタンをNimbusで同じサイズで表示させることができますか?サイズを標準化するJava Swing NimbusでJButtonのサイズを設定するには?

public class SampleNimbusProblem extends javax.swing.JDialog { 

    /** Creates new form SampleNimbusProblem */ 
    public SampleNimbusProblem(java.awt.Frame parent, boolean modal) { 
     super(parent, modal); 
     initComponents(); 
    } 

    /** This method is called from within the constructor to 
    * initialize the form. 
    * WARNING: Do NOT modify this code. The content of this method is 
    * always regenerated by the Form Editor. 
    */ 
    @SuppressWarnings("unchecked") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code"> 
    private void initComponents() { 
     java.awt.GridBagConstraints gridBagConstraints; 

     jPanel1 = new javax.swing.JPanel(); 
     okButton = new javax.swing.JButton(); 
     cancelButton = new javax.swing.JButton(); 
     jPanel2 = new javax.swing.JPanel(); 
     okButton1 = new javax.swing.JButton(); 
     cacelButton2 = new javax.swing.JButton(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); 
     getContentPane().setLayout(new java.awt.GridBagLayout()); 

     jPanel1.setLayout(new java.awt.GridBagLayout()); 

     okButton.setText("OK"); 
     okButton.setMaximumSize(new java.awt.Dimension(65, 23)); 
     okButton.setMinimumSize(new java.awt.Dimension(65, 23)); 
     okButton.setPreferredSize(new java.awt.Dimension(65, 23)); 
     gridBagConstraints = new java.awt.GridBagConstraints(); 
     gridBagConstraints.gridx = 0; 
     gridBagConstraints.gridy = 0; 
     gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 
     gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); 
     jPanel1.add(okButton, gridBagConstraints); 

     cancelButton.setText("Cancel"); 
     cancelButton.setMaximumSize(new java.awt.Dimension(65, 23)); 
     cancelButton.setMinimumSize(new java.awt.Dimension(65, 23)); 
     cancelButton.setPreferredSize(new java.awt.Dimension(65, 23)); 
     gridBagConstraints = new java.awt.GridBagConstraints(); 
     gridBagConstraints.gridx = 1; 
     gridBagConstraints.gridy = 0; 
     gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 
     gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); 
     jPanel1.add(cancelButton, gridBagConstraints); 

     gridBagConstraints = new java.awt.GridBagConstraints(); 
     gridBagConstraints.gridx = 0; 
     gridBagConstraints.gridy = 1; 
     gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 
     gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); 
     getContentPane().add(jPanel1, gridBagConstraints); 

     jPanel2.setLayout(new java.awt.GridBagLayout()); 

     okButton1.setText("OK"); 
     gridBagConstraints = new java.awt.GridBagConstraints(); 
     gridBagConstraints.gridx = 0; 
     gridBagConstraints.gridy = 0; 
     gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 
     gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; 
     gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); 
     jPanel2.add(okButton1, gridBagConstraints); 

     cacelButton2.setText("Cancel"); 
     gridBagConstraints = new java.awt.GridBagConstraints(); 
     gridBagConstraints.gridx = 1; 
     gridBagConstraints.gridy = 0; 
     gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 
     gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); 
     jPanel2.add(cacelButton2, gridBagConstraints); 

     gridBagConstraints = new java.awt.GridBagConstraints(); 
     gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 
     gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); 
     getContentPane().add(jPanel2, gridBagConstraints); 

     pack(); 
    }// </editor-fold> 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String args[]) { 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       SampleNimbusProblem dialog = new SampleNimbusProblem(new javax.swing.JFrame(), true); 
       dialog.addWindowListener(new java.awt.event.WindowAdapter() { 
        public void windowClosing(java.awt.event.WindowEvent e) { 
         System.exit(0); 
        } 
       }); 
       dialog.setVisible(true); 
      } 
     }); 
    } 

    // Variables declaration - do not modify 
    private javax.swing.JButton cacelButton2; 
    private javax.swing.JButton cancelButton; 
    private javax.swing.JPanel jPanel1; 
    private javax.swing.JPanel jPanel2; 
    private javax.swing.JButton okButton; 
    private javax.swing.JButton okButton1; 
    // End of variables declaration 

} 

答えて

2

一つの方法は、GridLayoutにコンポーネントを置くことです。詳細は、Laying Out Components Within a Containerを参照してください。 I setPreferredSize ..whenever


()、

はBTW - 推奨サイズを設定して、これまで、必要な場合は、めったにありません。レイアウトマネージャー(適切なパッド付き&ボーダー)は、さまざまな画面解像度、サイズ、PLAF、およびバージョン間でコンポーネントの正しいサイズを計算することを困難にします。

+0

感謝。 GridLayoutはレイアウトをコントロールしませんが、唯一の解決策は別のLayoutManagerを使用することです。 GridBagConstraintsはNimbusのJButtonではうまく動作しないようです。私はGroupLayoutを使用して適切なレイアウトを得ることができます。 – meyerjp3

+0

'GridLayout'は、ボタンを均等にサイズ調整します。これは簡単な方法です。 GUIのさまざまな部分で異なる効果が必要な場合(共通)、ネストされたレイアウトを参照してください(http://stackoverflow.com/a/5630271/418556)。しかし、あなたは既に 'GroupLayout'で作業レイアウトを持っていると言っていますか? –

+0

はい、ネストされたレイアウトを使用しています。それぞれ独自のレイアウトを持つ複数のパネルがあります。私は各パネルにGridBagConstraintを使用していましたが、Nimbusでレイアウトを正しく動作させることができませんでした。私のJDialogのすべてのパネルのメインレイアウトマネージャはGridbagConstraintsです。しかし、私のボタンパネルはGroupLayoutを使用していて、正常に動作しているようです。すべての提案をありがとう! – meyerjp3

2

あなたはNimbusかなりバグが正しいです(開発が最初QUATERのどこかで終わった)といくつかのケースでPreferredSizeのために設定され、Resizing a Component

1

がここにあるなぜこのような理由は、私が表示される例を望んでいた方法です無視。 GroupLayoutを使用することはやりました。 Nimbus LAFでは正しく表示されます。助けてくれてありがとう。私はGridBagLayoutに対する私の好みを再考する必要があると思う。

public class SampleNimbusProblem extends javax.swing.JDialog { 

/** Creates new form SampleNimbusProblem */ 
public SampleNimbusProblem(java.awt.Frame parent, boolean modal) { 
    super(parent, modal); 
    initComponents(); 
} 

/** This method is called from within the constructor to 
* initialize the form. 
* WARNING: Do NOT modify this code. The content of this method is 
* always regenerated by the Form Editor. 
*/ 
@SuppressWarnings("unchecked") 
// <editor-fold defaultstate="collapsed" desc="Generated Code">       
private void initComponents() { 
    java.awt.GridBagConstraints gridBagConstraints; 

    jPanel1 = new javax.swing.JPanel(); 
    okButton = new javax.swing.JButton(); 
    cancelButton = new javax.swing.JButton(); 
    okButton1 = new javax.swing.JButton(); 
    cacelButton2 = new javax.swing.JButton(); 

    setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); 
    getContentPane().setLayout(new java.awt.GridBagLayout()); 

    okButton.setText("OK"); 
    okButton.setMaximumSize(new java.awt.Dimension(65, 23)); 
    okButton.setMinimumSize(new java.awt.Dimension(65, 23)); 
    okButton.setPreferredSize(new java.awt.Dimension(65, 23)); 

    cancelButton.setText("Cancel"); 
    cancelButton.setMaximumSize(new java.awt.Dimension(65, 23)); 
    cancelButton.setMinimumSize(new java.awt.Dimension(65, 23)); 
    cancelButton.setPreferredSize(new java.awt.Dimension(65, 23)); 

    okButton1.setText("OK"); 

    cacelButton2.setText("Cancel"); 

    javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); 
    jPanel1.setLayout(jPanel1Layout); 
    jPanel1Layout.setHorizontalGroup(
     jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(jPanel1Layout.createSequentialGroup() 
      .addGap(5, 5, 5) 
      .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
       .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() 
        .addComponent(okButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
        .addGap(10, 10, 10) 
        .addComponent(cancelButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 
       .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() 
        .addComponent(okButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 63, javax.swing.GroupLayout.PREFERRED_SIZE) 
        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 
        .addComponent(cacelButton2)))) 
    ); 
    jPanel1Layout.setVerticalGroup(
     jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(jPanel1Layout.createSequentialGroup() 
      .addGap(5, 5, 5) 
      .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
       .addComponent(okButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addComponent(cancelButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
      .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
       .addComponent(cacelButton2) 
       .addComponent(okButton1)) 
      .addContainerGap(102, Short.MAX_VALUE)) 
    ); 

    gridBagConstraints = new java.awt.GridBagConstraints(); 
    gridBagConstraints.gridx = 0; 
    gridBagConstraints.gridy = 1; 
    gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; 
    gridBagConstraints.insets = new java.awt.Insets(10, 125, 112, 125); 
    getContentPane().add(jPanel1, gridBagConstraints); 

    pack(); 
}// </editor-fold>       

/** 
* @param args the command line arguments 
*/ 
public static void main(String args[]) { 
    java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      SampleNimbusProblem dialog = new SampleNimbusProblem(new javax.swing.JFrame(), true); 
      dialog.addWindowListener(new java.awt.event.WindowAdapter() { 
       public void windowClosing(java.awt.event.WindowEvent e) { 
        System.exit(0); 
       } 
      }); 
      dialog.setVisible(true); 
     } 
    }); 
} 

// Variables declaration - do not modify      
private javax.swing.JButton cacelButton2; 
private javax.swing.JButton cancelButton; 
private javax.swing.JPanel jPanel1; 
private javax.swing.JButton okButton; 
private javax.swing.JButton okButton1; 
// End of variables declaration     

}

関連する問題