1

我无法处理我的 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);
                }
            }
        }
    }
}
4

2 回答 2

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);
         }
    }
}
于 2013-02-12T17:29:07.183 回答
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 位数大)。

于 2013-02-12T17:35:42.530 回答