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

时间:2018-03-26 17:27:28

标签: java swing events awt jcombobox

我正在使用带有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的单独类的情况下执行此操作?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:-1)

据我所知你不能。这是因为你的匿名类在变量的副本上工作,如果不是最终的,可以改变,在这种情况下不允许这样做。