禁用 JComboBox 的 actionListener(使用匿名 class 时)

Disable actionListener for JComboBox (when using anonymous class)

我正在将 actionListener 与 JComboBox 事件一起使用。当我手动设置在我的程序中选择的项目时,我想禁用侦听器。

在这里你可以看到这个-

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;

但是我得到了这个:

错误:从内部 class 引用的局部变量必须是最终的或实际上是最终的

如果不创建另一个扩展 JComboBox 的单独 class,我如何才能做到这一点?

据我所知你不能。这是因为您的匿名 class 作用于可以更改的变量副本(如果不是最终的),在这种情况下这是不允许的。

itemisSetByProgram 移动到您 class 的私有字段。实例字段专门用于存储状态。

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; });