繁体   English   中英

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

[英]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的类呢?

itemisSetByProgram移到类的私有字段中。 实例字段专门用于存储状态。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM