在ActionPerformed上更改GridLayout中的JButton文本

时间:2015-02-19 20:16:08

标签: java jbutton grid-layout

我试图在点击时更改JButton文本。 GridLayout中的按钮位于数组中。我尝试使用.setText,但NetBeans显示错误。

  

从内部类引用的局部变量必须是最终的或有效的最终

将变量从私有变为最终没有帮助。我是Java的新手,我将非常感激任何帮助。

   package widok;

   import java.awt.GridLayout;
   import java.awt.event.ActionEvent;
   import java.awt.event.ActionListener;
   import javax.swing.JButton;
   import javax.swing.JFrame;

   public class Gameplay extends JFrame {

private JButton[] button = new JButton[25];

public Gameplay() {

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    getContentPane().setLayout(new GridLayout(5, 5));

    for (int i = 0; i < 25; i++) {
        button[i] = new JButton(" ");

        button[i].addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent ae) {
                button[i].setText("X");
            }
        });

        getContentPane().add(button[i]);

    }

    pack();
    setVisible(true);

}

}

谢谢!

1 个答案:

答案 0 :(得分:1)

这里的问题是“i”,它有for循环的局部上下文,但actionPerformed不在同一个上下文中。因为“我”正在改变它不能成为最终

你可以做什么发出动作的来源,可以从Actionaevent获得,例如

        public void actionPerformed(ActionEvent ae) {
            JButton btn = (JButton)ae.getSource();
            btn.setText("X");