2011-07-06 4 views
2

Java Swingライブラリを使用してGUIを開発しています。レイアウトとしてGridlayoutを使用しているJButtonをいくつか追加したいのですが、パネルのサイズはモニター全体のサイズですが、JButtonのサイズは違うかもしれませんが、私はパネルに10 * 10の配列を追加することができますが、パネルに3 * 3の配列のJbuttonを追加することができます。私が3 * 3を追加すると、jbuttonsは現在のJPanelの上にあるJPanel(これはオプションと呼ばれます)全体を占有するだけの大きさになります。定数を設定するにはどうすればいいですか?サイズが2 Jbutton(現在はディスプレイ全体を占める)であっても、サイズが変更されないようにJButtonのサイズを変更します(setSize関数は動作しません。また、レイアウトはnullではなくGridLayoutにします)。 :レイアウトが "GridLayout"であるJPanelにJButtonを追加する

public class Edit extends JFrame{ 
public Edit() 
{ 
    width = (int)Toolkit.getDefaultToolkit().getScreenSize().getWidth(); 
    height = (int)Toolkit.getDefaultToolkit().getScreenSize().getHeight(); 
    newer = new JButton(new ImageIcon(b)) ; 
    done = new JButton(new ImageIcon(f)) ; 
    savior = new JButton(new ImageIcon(d)) ; 
    undo = new JButton(new ImageIcon(h)) ; 
    newer.setSize(200, 60); 
    done.setSize(200, 60); 
    savior.setSize(200, 60);  
    undo.setSize(200, 60); 
    options = new JPanel(); 
    options.setSize(width , 100); 
    options.setLayout(new GridLayout(1,5,(width- 1000)/6,20)) ; 
    options.add(newer); 
    options.add(done); 
    options.add(savior); 
    options.add(undo); 
    options.setBackground(Color.magenta); 
    options.add(selector); 
    this.setExtendedState(this.MAXIMIZED_BOTH); 
    this.setUndecorated(true); 
    this.setVisible(true); 
    view = new JPanel(); 
    regions = new JButton[3][3]; 
    view.setSize(width, height - 100) ; 
    view.setLayout(new GridLayout(3,3)); 
    for(int i=0;i<3;i++) 
       for(int j=0;j<3;j++) 
     { 
       regions[i][j] = new JButton(); 
        regions[i][j].setSize(80,80) ; 
      view.add(regions[i][j]); 
      } 
    editPhase = new JPanel(); 
    editPhase.setLayout(null); 
    editPhase.add(options,BorderLayout.NORTH); 
    editPhase.add(view,BorderLayout.SOUTH); 
    this.add(editPhase); 
    } 
} 

ありがとうございました。ここで

+3

まず、あなたが '' setPreferredSize(...)を呼び出すべきである、ない 'のsetSize(...)'。もう1つは、各ボタンをパネル上に配置し、その優先サイズを設定して、指定した領域にそのボタンを追加することです。したがって、 'JButton'ではなく' JPanel'だけがサイズ変更されますか? – mre

+0

もっと強力で便利なレイアウトを使用しないのはなぜですか(私はJGoodiesを好む、多くはMigレイアウトまたはテーブルレイアウトをお勧めします)? –

答えて

4

コメントからのアイデアを使用して実装です:

public class Main { 

    public static void main(String[] args) { 
    JFrame frame = new JFrame(); 

    int gridSize = 3; // try 4 or 5, etc. buttons are always 50x50 

    JPanel panel = new JPanel(new GridLayout(gridSize, gridSize)); 
    panel.setPreferredSize(new Dimension(500, 500)); 

    for (int i = 0; i < gridSize; i++) { 
     for (int j = 0; j < gridSize; j++) { 
     JPanel buttonPanel = new JPanel(new GridBagLayout()); 
     GridBagConstraints c = new GridBagConstraints(); 
     c.anchor = GridBagConstraints.CENTER; 

     JButton button = new JButton(); 
     button.setPreferredSize(new Dimension(50, 50)); 
     buttonPanel.add(button, c); 
     panel.add(buttonPanel); 
     } 
    } 
    frame.setContentPane(panel); 
    frame.pack(); 
    frame.setVisible(true); 
    } 
} 
+0

+1、あなたはアイデアを持っていますが、これが最善の実装であるかどうかはわかりません。多分それは? :) – mre

+0

ありがとう:)はい、それをやるよ。 –

関連する問題