我试图在点击时更改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);
}
}
谢谢!
答案 0 :(得分:1)
这里的问题是“i”,它有for循环的局部上下文,但actionPerformed不在同一个上下文中。因为“我”正在改变它不能成为最终
你可以做什么发出动作的来源,可以从Actionaevent获得,例如
public void actionPerformed(ActionEvent ae) {
JButton btn = (JButton)ae.getSource();
btn.setText("X");