[英]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
,因为ItemEvent
与ActionEvent
并不完全相同。
另一种选择是在清除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.