![](/img/trans.png)
[英]Anonymous ActionListener Class Exception “NullPointerException”
[英]Disable actionListener for JComboBox (when using anonymous class)
我在JComboBox event中使用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;
但是在這里我得到這個:
錯誤:從內部類引用的局部變量必須是final或有效的final
我如何才能做到這一點,而又不用另外一個擴展JComboBox的類呢?
將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; });
據我所知你做不到。 這是因為您的匿名類在變量的副本上工作(如果不是最終變量),並且可以更改,並且在這種情況下是不允許的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.