更改ActionPerformed上GridLayout中的JButton文本



单击时,我正在尝试更改JButton文本。按钮在GridLayout中的数组中。我尝试使用.setText,但是NetBeans显示了一个错误。

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

将变量从private更改为final没有帮助。我是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);
}
}

谢谢!

这里的问题是"i",它有for循环的本地上下文,但actionPerformed不在同一上下文中。因为"i"正在改变,它不能成为最终

你能做的是发布动作的来源,可以从Actionaevent获得,例如

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

最新更新