我正在尝试用 Java 创建简单的 GUI 程序,但我找不到正确的解决方案来解决无法引用在不同方法中定义的内部类中的非最终变量的错误。
这是我到目前为止的小代码;
myPanel = new JPanel();
JButton myButton = new JButton("create buttons");
myButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int val = Integer.parseInt(textfield.getText());
for(int i = 0; i < val; i++) {
JButton button = new JButton("");
button.setText(String.valueOf(i));
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
clickButton(i);
}
});
myPanel.add(button);
myPanel.revalidate();
}
}
});
也许我的做法是完全错误的。我想做的是;我想创建一组按钮,当用户按下按钮时,我想显示一条消息,例如“您按下了按钮 4”或“您按下了按钮 10”。
最佳答案
i
必须是 final 以便内部类访问它。您可以通过将其复制到最终变量来解决此问题。
但我建议将 for
循环的内容重构为一个单独的方法,如下所示:
for(int i = 0; i < val; i++) {
myPanel.add(makeButton(i));
myPanel.revalidate();
}
...
private JButton makeButton(final int index) {
JButton button = new JButton("");
button.setText(String.valueOf(index));
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
clickButton(index);
}
});
return button;
}
关于java - 不能引用非最终变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3809729/