現在、3x3ボタン付きのTic Tac Toe GUIグリッドを設定しようとしています。Java:内部メソッド中にオブジェクト参照を見つける
私はJButtonの配列を設定し、ボタンが押されるたびにチェックするリスナーを追加しました。
私の問題は配列内のButtonオブジェクトにアクセスしているため、ボタンリスナーの参照を保存するためにカスタムリスナーコンストラクタにパラメータを追加する必要がありました。それはそのままでは動作しますが、非常にエレガントではありません。 actionPerformedの中にボタンで正しいJButtonオブジェクトを見つける方法はありますか?これを行うには良い方法がありますか?事前に
おかげ
class BigPanel
{
public JPanel bigPanel= new JPanel(new GridLayout(3,3));
public JButton[][] buttons = new JButton[3][3];
public BigPanel()
{
for (int i=0; i<3; i++)
{
for (int j=0; j<3; j++)
{
buttons[i][j] = new JButton();
buttons[i][j].setPreferredSize(new Dimension(75,75));
// Line of interest, adding the listener
buttons[i][j].addActionListener(new CustomActionListener(buttons[i][j]));
bigPanel.add(buttons[i][j]);
}
}
}
}
class CustomActionListener implements ActionListener
{
public int a;
public int b;
public JButton button;
CustomActionListener(JButton a)
{
button = a;
}
public void actionPerformed(ActionEvent e)
{
changeButton(a, b, CurrPlayer.CROSSES);
}
public void changeButton(int a, int b, CurrPlayer player)
{
if (player == CurrPlayer.NOUGHTS)
{
Icon icon = new ImageIcon("Nought.jpg");
button.setIcon(icon);
}
else
{
Icon icon = new ImageIcon("Cross.jpg");
button.setIcon(icon);
}
}
}
リスナーがどのように動作するかはわかりません。ボタンのx座標とy座標は決して設定されません。 –
申し訳ありませんが、あなたは何を意味するのか分かりません、あなたは説明できますか?私はこれまで押されていたときにボタンイメージを変更するリスナーを得ることができました。 –