addItemListener with for-loop 不可能
addItemListener with for-loop not possible
为了缩短我的代码,我开始使用我的 java 项目中所需的组件构建列表,以便通过简单的 for 循环访问它们。
由于一切正常,我想将 ItemListeners 添加到列表中的组件:
checkBoxes.get(0).addItemListener(){/*including code here*/}
工作得很好,但我也想用循环设置它们。所以我尝试了这个:
for (int i=0; i<=10; i++){
checkBoxes.get(i).addItemListener(new ItemListener){
public void itemStateChanged(ItemEvent arg0){
someMethod(i);
}
});
}
因为复选框应该根据其索引触发另一种方法。我收到编译器错误:
Local variable i defined in an enclosing scope must be final or effectively final
所以我假设我不能以这种动态方式添加 ItemListeners?有解决办法吗?
经过一秒钟的测试,我似乎根本无法使用 i
?
正如编译器所说,i
需要是最终的。
为此,您可以在循环中使用中间最终变量。
for(int i=0; i<checkBoxes.size(); i++) {
final int finalI = i;
checkBoxes.get(i).addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent arg0){
someMethod(finalI);
}
});
}
为了缩短我的代码,我开始使用我的 java 项目中所需的组件构建列表,以便通过简单的 for 循环访问它们。
由于一切正常,我想将 ItemListeners 添加到列表中的组件:
checkBoxes.get(0).addItemListener(){/*including code here*/}
工作得很好,但我也想用循环设置它们。所以我尝试了这个:
for (int i=0; i<=10; i++){
checkBoxes.get(i).addItemListener(new ItemListener){
public void itemStateChanged(ItemEvent arg0){
someMethod(i);
}
});
}
因为复选框应该根据其索引触发另一种方法。我收到编译器错误:
Local variable i defined in an enclosing scope must be final or effectively final
所以我假设我不能以这种动态方式添加 ItemListeners?有解决办法吗?
经过一秒钟的测试,我似乎根本无法使用 i
?
正如编译器所说,i
需要是最终的。
为此,您可以在循环中使用中间最终变量。
for(int i=0; i<checkBoxes.size(); i++) {
final int finalI = i;
checkBoxes.get(i).addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent arg0){
someMethod(finalI);
}
});
}