繁体   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