Java 如何在不触发动作侦听器的情况下从jComboBox中删除所有项?

Java 如何在不触发动作侦听器的情况下从jComboBox中删除所有项?,java,swing,jcombobox,Java,Swing,Jcombobox,当我试图清除我的JComboBox中列出的项目时,它会触发绑定到组合框的ActionListener。我有另一个函数,它会被递归调用,并生成一个重复的值。是否有一种方法可以暂时禁用动作侦听器并在不触发事件的情况下从JComboBox中删除所有内容 jComboBox_数据库.removeAllItems(); jComboBox_database.setModel(新的javax.swing.DefaultComboxModel(新字符串[]{“项目1”、“项目2”、“项目3”、“项目4”)

当我试图清除我的
JComboBox
中列出的项目时,它会触发绑定到组合框的
ActionListener
。我有另一个函数,它会被递归调用,并生成一个重复的值。是否有一种方法可以暂时禁用动作侦听器并在不触发事件的情况下从
JComboBox
中删除所有内容

jComboBox_数据库.removeAllItems();

jComboBox_database.setModel(新的javax.swing.DefaultComboxModel(新字符串[]{“项目1”、“项目2”、“项目3”、“项目4”);
jComboBox_database.addActionListener(新java.awt.event.ActionListener(){
@凌驾
public void actionPerformed(java.awt.event.ActionEvent evt){
jComboBox_数据库执行的操作(evt);

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

在你的ActionListener中:

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

据我所知,您不能“禁用”一个
ActionListener

每当
JComboBox
选择发生更改时,
ActionListener
将收到通知。清除这些项还会将“所选项”设置为null,从而调用
actionPerformed
方法

假设您只想在实际选择值时调用递归方法,那么您可能应该实现它

jcombox\u数据库.addItemListener(新java.awt.event.ItemListener(){
public void itemStateChanged(java.awt.event.ItemEvent evt){
if(evt.getStateChange()==ItemEvent.SELECTED){
jComboBox_数据库执行的操作(evt);
}
}
});
当然,您可能还需要将参数更改为方法
jComboBox\u databaseActionPerformed
,因为
ItemEvent
ActionEvent
不完全相同


另一种选择是,在清除
JComboBox
之前简单地调用方法,然后在之后调用方法
addActionListener

实际上,不要使用
ActionListener
,而是使用
ItemListener
。ItemListener工作得很好!谢谢@Abra和@OlivierGrégoire!
public void actionPerformed(java.awt.event.ActionEvent evt) {
    if( ! "cmdIgnore".equals(evt.getActionCommand())) {
        jComboBox_databaseActionPerformed(evt);
    }
}