2016-04-22 19 views
1
public class TestPane extends JPanel { 

    public TestPane() { 
     setLayout(new GridBagLayout()); 

     GridBagConstraints gbc = new GridBagConstraints(); 

     ImageIcon grassIcon = new ImageIcon("C:\\Users\\Pamvotis\\Desktop\\Project\\img\\icon.png"); 
     JLabel labels = new JLabel(); 

     for (int row = 0; row < 10; row++) { 
      for (int col = 0; col < 6; col++) { 
       gbc.gridx = col; 
       gbc.gridy = row; 

       CellPane cellPane = new CellPane(); 
       Border border = null; 
       if (row < 9) { 
        if (col < 5) { 
         border = new MatteBorder(1, 1, 0, 0, Color.BLACK); 
        } else { 
         border = new MatteBorder(1, 1, 0, 1, Color.BLACK); 
        } 
       } else { 
        if (col < 5) { 
         border = new MatteBorder(1, 1, 1, 0, Color.BLACK); 
        } else { 
         border = new MatteBorder(1, 1, 1, 1, Color.BLACK); 
        } 
       } 
       cellPane.setBorder(border); 
       if ((row==0)&&((col==2)||(col==3))) { 
        cellPane.setBackground(Color.RED); 
       } else if ((row==9)&&((col==2)||(col==3))) { 
        cellPane.setBackground(Color.WHITE); 
        labels = new JLabel(grassIcon);add(labels); 
       } else { 
        cellPane.setBackground(Color.GREEN); 
       } 

       add(cellPane, gbc); 
      } 
     } 
    } 

私はこのコードを持っていますが、問題はプログラムを実行するたびにイメージのラベルがグリッドの後の最初の行に配置されることです。それは、グリッドの最初の行またはグリッドの後の最初の行に常にラベルが表示されるようにしています。誰もこれで私を助けることができますか?JavaのGridLayout Panelの特定のセルにラベルを追加するにはどうすればよいですか?

答えて

1
add(labels); 

制約を指定せずにパネルにラベルを追加しようとしています。私はデフォルトの制約が使用されると信じています。

コンポーネントの位置を制御する場合は、すべてのadd(...)ステートメントで制約を指定する必要があります。

編集:私はあなたが欲しい推測している

else if ((row==9)&&((col==2)||(col==3))) {cellPane.setBackground(Color.WHITE);labels = new JLabel(grassIcon);add(labels);} 

else if ((row==9)&&((col==2)||(col==3))) 
{ 
    cellPane.setBackground(Color.WHITE); 
    labels = new JLabel(grassIcon); 
    //add(labels); 
    cellPane.add(labels); 
} 
else 

が今、あなただけの "cellPaneは、" レイアウトマネージャを使用していることを確認する必要があります。

+0

add(...)文でどのように制約を指定する必要がありますか?申し訳ありませんが、私は非常にjavaで新しいです – helpme

+0

@helpme、私はあなたの要件が何であるか分かりません。なぜ同じループのグリッドに2つのコンポーネントを追加しようとしているのかわかりません。おそらく、ラベルをパネルではなくCellPaneに追加したいのですか?繰り返しますが、CellPaneが何であるか、またはセルペインでどのレイアウトマネージャを使用しているかわかりません。 「私はJavaで非常に新しいです」 - [Swingチュートリアル](http://docs.oracle.com/javase/tutorial/uiswing/TOC.html)を参考にしてください。それはすべてのSwingの基礎の実例を持っています。私のシンプルな提案があなたを助けない場合は、「レイアウトマネージャ」セクションに作業例があります。 – camickr

+0

また、1行にコードブロックを書き込まないでください。各Java文は、読みやすく、保守しやすくするために、独自の行に記述する必要があります。編集を参照してください。 – camickr

関連する問題