[英]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.