【发布时间】:2012-04-29 11:17:50
【问题描述】:
我的代码实际上很简单。我看到一个简单相似的代码来自this article。
起初,我有 1 个组合框。我有一个名为 itemStateChanged() 的监听器。我添加到这个监听器的目的是: "当用户从 Dropbox 中点击(选择)一个项目时执行一些代码"。
Cmb_ItemCategory = new javax.swing.JComboBox();
Cmb_ItemCategory.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Loading..." }));
Cmb_ItemCategory.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
Cmb_ItemCategoryItemStateChanged(evt);
}
});
private void Cmb_ItemCategoryItemStateChanged(java.awt.event.ItemEvent evt) {
if(evt.getStateChange() == java.awt.event.ItemEvent.SELECTED){
System.err.println("Sombody click or change my model content");
}
}
在代码后面,我抓取了一些数据,然后调用了 removeAllItems() 方法。 然后我在其中设置了一个新模型(来自新数据)。
-- at another line of code ---
Cmb_ItemCategory.removeAllItems();
Cmb_ItemCategory.setModel(newModel);
当我执行 removeAllItem() 方法时,我意识到我的 itemStateChanged() 被调用。调用一次。
那么,如何让它只在用户单击(选择)时才被调用,而不是在 removeAllItems() 调用时调用?
它类似于this article. 但它不是removingItems 的情况。 CMIIW。
【问题讨论】:
-
只需在
if (ie.getStateChange() == ItemEvent.SELECTED){}中编写代码,因此当您调用removeAllItem()时,此块将不会运行。 -
@nIcEcOw:我已经这样做了,请看一下我刚刚在那里写的上面的代码......但有趣的情况是它正在运行,即使我已经使用了 ItemEvent.SELECTED if-else . :(
-
我也测试过那个东西,就我而言,它不是那样做的,使用 JRE 1.7 update 3,不要放其他部分,因为你在问题中描述的,你只想要一种情况可以工作,所以只要部分可以。
-
OMG... 可能是因为我使用的是 JDK 1.6 更新 31
标签: java swing methods jcombobox comboboxmodel