我正在使用带有JComboBox事件的actionListener。我想在手动设置我的程序中选择的项目时禁用侦听器。
在这里你可以看到 -
String item=null;
String isSetByProgram=false;
jcb1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae){
if(isSetByProgram)
return;
item=jcb1.setSelectedItem();
}
});
//Now set by program
isSetByProgram = true;
jcb1.setSelectedItem("customItem1");
isSetByProgram=false;
但在这里我得到了这个:
错误:从内部类引用的局部变量必须是最终的或有效的最终
如何在不另外创建扩展JComboBox的单独类的情况下执行此操作?
答案 0 :(得分:1)
将item
和isSetByProgram
移至您班级的私人字段。实例字段专门用于存储状态。
public class MyApplication {
private boolean isSetByProgram;
private String item;
// ...
jcb1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae){
if (isSetByProgram) {
return;
}
item = jcb1.getSelectedItem();
}
});
//Now set by program
isSetByProgram = true;
jcb1.setSelectedItem("customItem1");
EventQueue.invokeLater(() -> { isSetByProgram = false; });
答案 1 :(得分:-1)
据我所知你不能。这是因为你的匿名类在变量的副本上工作,如果不是最终的,可以改变,在这种情况下不允许这样做。