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