2015-10-04 6 views
5

セル(0,0)、(1,0)、(0,1)にボタンを追加する単純なGridBagLayoutを作った。私は既存のセルに接続されていないセルにJButtonを追加したいGridBagLayoutに空のセルのプレースホルダパネルが必要ですか?

Desired result

JPanel panelMain = new JPanel(new GridBagLayout()); 
GridBagConstraints c = new GridBagConstraints(); 
    c.gridx = 0; 
    c.gridy = 0; 
    panelMain.add(new JButton("0,0"),c); 

    c.gridx = 1; 
    c.gridy = 0; 
    panelMain.add(new JButton("1,0"),c); 

    c.gridx = 0; 
    c.gridy = 1; 
    panelMain.add(new JButton("0,1"),c); 

は、私は、結果UIを見て幸せでした。私はそれを空きスペースで区切りたい。これを試すと、新しい JButtonが他のものの隣に集中します。

JPanel panelMain = new JPanel(new GridBagLayout()); 
GridBagConstraints c = new GridBagConstraints(); 
    c.gridx = 0; 
    c.gridy = 0; 
    panelMain.add(new JButton("0,0"),c); 

    c.gridx = 1; 
    c.gridy = 0; 
    panelMain.add(new JButton("1,0"),c); 

    c.gridx = 0; 
    c.gridy = 1; 
    panelMain.add(new JButton("0,1"),c); 

    c.gridx = 3; 
    c.gridy = 0; 
    panelMain.add(new JButton("3,0"),c); 

出力:JButton("3,0")はセル(2,0)に表示している

Undesired result

ここで添加されます。空のJPanelをセル(2,0)のプレースホルダとして使用する必要がありますか?もっと重要なのは、なぜこれが起こっているのか?

答えて

3

にコンポーネントが配置されていない限り、レイアウトには2,0の幅を残す必要があります。 UIを完成するまでに、コンポーネントが配置されていれば上手く見えるはずです。例えば:

他の場合

enter image description here

のためには、コンテナの背景色に背景色のマッチングと空JPanelを追加することができます。

2

空のJPanelをセル(2,0)のプレースホルダとして使用する必要がありますか?

"insets"グリッドバッグ制約を使用して、コンポーネント間にスペースを与えることができます。インセット制約の詳細については、How to Use GridBagLayoutのSwingチュートリアルを読んでください。

また、プレースホルダを使用する場合は、Box.createHorizontalStrut(...)を使用して幅を簡単に指定できます。

さらに重要なことに、なぜこのようなことが起こりますか?

セルにコンポーネントがない限り、セルのサイズはありません。各セルは互いに独立しているので、セル(2,0)のサイズはどのくらいですか?

関連する問題