我无法处理JButtons矩阵中的事件。我需要找出按下哪个按钮,然后更改对象颜色以匹配按钮。
我目前正在使用此代码:
private class matrixButtonListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
JButton btn = (JButton) (e.getSource());
for (int i = 0; i < matrixBouton.length; i++)
{
for (int j = 0; j < matrixBouton[i].length; j++)
{
btn.equals(matrixBouton[i][j]);
if (btn.getBackground() == COLOR_NEUTRAL)
{
btn.setBackground(COLOR_PLAYER);
}
}
}
}
}
答案 0 :(得分:3)
您只需使用JButtons
跟踪按钮,而不是遍历所有evt.getSource()
。这将返回对按下的实际按钮的引用。然后你可以按照自己的意愿进行表演。
您确实可以使用以下简化代码:
private class matrixButtonListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
JButton btn = (JButton) (e.getSource());
if (btn.getBackground() == COLOR_NEUTRAL)
{
btn.setBackground(COLOR_PLAYER);
}
}
}
答案 1 :(得分:1)
您可以做的另一件事是将坐标存储在ActionListener
:
private class matrixButtonListener implements ActionListener
{
private int i;
private int j;
public matrixButtonListener (int i, int j)
{
this.i = i;
this.j = j;
}
public void actionPerformed(ActionEvent e)
{
//this gives you the button on which you pressed
JButton pressedButton = matrixBouton[this.i][this.j];
if (pressedButton.getBackground() == COLOR_NEUTRAL)
{
pressedButton.setBackground(COLOR_PLAYER);
}
}
}
您可以像这样设置每个听众:
matrixBouton[i][j].addActionListener (new matrixButtonListener (i, j));
将创建监听器的i x j
个实例。通常这不是什么大问题,除非i x j
非常大(3位或4位大)。