簡體   English   中英

如何在不觸發動作偵聽器的情況下從 jComboBox 中刪除所有項目?

[英]How do I remove all items from a jComboBox without triggering an action listener?

當我嘗試清除JComboBox中列出的項目時,它會觸發綁定到組合框的ActionListener 我有另一個 function 結果被遞歸調用並生成重復值。 有沒有辦法在不觸發事件的情況下暫時禁用動作偵聽器並從JComboBox中刪除所有內容?

jComboBox_database.removeAllItems();

jComboBox_database.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
jComboBox_database.addActionListener(new java.awt.event.ActionListener() {
    @Override
    public void actionPerformed(java.awt.event.ActionEvent evt) {
        jComboBox_databaseActionPerformed(evt);

據我所知,您不能“禁用” ActionListener

每當JComboBox選擇更改時,都會通知ActionListener 清除項目還會將“選定項目”設置為 null,從而調用您的actionPerformed方法。

假設您只想在實際 select 一個值時調用遞歸方法,也許您應該實現ItemListener

jComboBox_database.addItemListener(new java.awt.event.ItemListener() {
    public void itemStateChanged(java.awt.event.ItemEvent evt) {
        if (evt.getStateChange() == ItemEvent.SELECTED) {
            jComboBox_databaseActionPerformed(evt);
        }
    }
});

當然,您可能還需要將參數更改為您的方法jComboBox_databaseActionPerformed ,因為ItemEventActionEvent並不完全相同。

另一種選擇是在清除JComboBox之前簡單地調用方法removeActionListener ,然后在之后調用方法addActionListener

您可以在removeAllItems()之前和之后更改 JComboBox 的 ActionCommand 。

String oldCommand = jComboBox_database.getActionCommand();
jComboBox_database.setActionCommand("cmdIgnore");
jComboBox_database.removeAllItems();
jComboBox_database.setActionCommand(oldCommand);

在你的 ActionListener 中:

public void actionPerformed(java.awt.event.ActionEvent evt) {
    if( ! "cmdIgnore".equals(evt.getActionCommand())) {
        jComboBox_databaseActionPerformed(evt);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM