2

次のようなコードで、NxNグリッドにJButtonのGridLayoutがあるとします。

JPanel bPanel = new JPanel();
bPanel.setLayout(new GridLayout(N, N, 10, 10));
    for (int row = 0; row < N; row++)
    {
        for (int col = 0; col < N; col++)
        {
            JButton b = new JButton("(" + row + ", " + col + ")");
            b.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {

                }
            });
            bPanel.add(b);
        }
    }

グリッド内の各ボタンに個別にアクセスして、setText()を介してボタンの名前を変更するにはどうすればよいですか?これは、問題のボタンを実際に押す以外に行う必要があります。

各ボタンはローカルで「b」としてインスタンス化されるため、現在、各ボタンのグローバルにアクセス可能な名前は使用できません。各ボタンに個別にアクセスするにはどうすればよいですか?JButton [] []のような配列は、すべてのボタンへの参照を保持できますか?上記のコードでこれをどのように設定できますか?

どんな入力でも大歓迎です。

ありがとう。

4

2 に答える 2

7

あなたはできる、

1)putClientProperty

buttons[i][j].putClientProperty("column", i);
buttons[i][j].putClientProperty("row", j);
buttons[i][j].addActionListener(new MyActionListener());

public class MyActionListener implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {
        JButton btn = (JButton) e.getSource();
        System.out.println("clicked column " + btn.getClientProperty("column")
                + ", row " + btn.getClientProperty("row"));
}

2)ActionCommand

于 2012-04-30T14:21:48.290 に答える
3

配列(またはリストなど)を作成して、すべてのボタンを格納できます。public Component[] getComponents()または、bPanel(コンテナ)のメソッドを使用することもできます。

于 2012-04-30T13:44:40.570 に答える