簡體   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