动作听众

时间:2016-12-03 21:16:38

标签: java listener action

我有jbuttons的行和列,当点击每个按钮时,它们应该变成红色,当再次点击它们时,它们应该返回到它们的原始颜色。到目前为止,我编写的代码如下:

public class MainPanel extends JPanel
{

    private JButton[][] btn1 = new JButton[3][5];

    public MainPanel() 
    {
        JPanel MainPanel= new JPanel();
        MainPanel.setPreferredSize(new Dimension(700,700));

        JPanel p1 = new JPanel();
        {
            p1.setLayout(new GridLayout(3,5,10,10));
            p1.setBackground(Color.WHITE);
            for(int i = 0; i < 3; i++) 
                for(int j = 0; j < 5; j++)
                {
                    btn1[i][j] = new JButton();
                    btn1[i][j].setBackground(Color.YELLOW);
                    p1.add(btn1[i][j]);

                    btn1[i][j].addActionListener
                    (
                        new ActionListener() 
                        {
                            public void actionPerformed(ActionEvent e) 
                            {
                                btn1[i][j].setBackground(Color.RED);
                            }
                        }
                    );
                }
        }
    }
}

btn1[i][j].setBackground(Color.RED);表示'从内部类引用的局部变量必须是最终的或有效的最终'。有谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

在循环中添加侦听器:

for(int i = 0; i < 3; i++)
    for(int j = 0; j < 5; j++) {
        final JButton btn = btn1[i][j];
        btn1[i][j].addActionListener(
            new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    btn.setBackground(Color.RED);
                }
            }
        );
    }

您只将侦听器添加到第一个按钮。