【发布时间】:2010-10-10 18:30:21
【问题描述】:
我正在尝试创建一个 JLabels 数组,单击时它们都应该不可见。当试图通过需要访问用于声明标签的循环的迭代变量的内部类来设置鼠标侦听器时,就会出现问题。代码不言自明:
for(int i=1; i<label.length; i++) {
label[i] = new JLabel("label " + i);
label[i].addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent me) {
label[i].setVisible(false); // compilation error here
}
});
cpane.add(label[i]);
}
我认为我可以通过使用 this 或 super 而不是在内部方法中调用 label[i] 来克服这个问题,但我无法弄清楚。
编译错误是:局部变量i是从内部类中访问的;需要声明为final`
我确信答案一定是我没有想到的非常愚蠢的事情,或者我犯了一些小错误。
任何帮助将不胜感激
【问题讨论】:
-
错误是:
local variable i is accessed from within inner class; needs to be declared final -
@omtinez:那么也许您应该将变量声明为
final,不是吗? (也可以看看this Q&A) -
@Matt Ball,使用迭代器变量
final不是一个好主意。
标签: java variables event-handling inner-classes jlabel