这一定是我的误解,但我有以下几点:
我在 Jcombobox 中添加了一个 ItemListener。
在项目侦听器中,我检查事件是否属于 ItemSelected 类型。
如果是,我会更新 JTextPane 中的值。问题是它的工作原理如下:
我单击 jcombobox 中的一个新值,而 jtextfield 中没有任何更改。我必须实际单击另一个组件,例如 jtextfield,然后更新 jtextfield。
似乎必须从 jcombobox 中移除焦点,以便将事件更改分派到 itemlistener 代码。
这是它应该如何工作,还是我做错了什么?是否可以在不需要移除焦点的情况下处理事件?
更新:这是我的代码和方法 updateJTextPane在我单击另一个组件后调用,而不是当我从组合中选择一个新值时调用。即组合的值为“1”,我单击下拉列表并单击“2”。当前选定的项目现在是“2”。此时没有调用我的方法。我单击第二个组合框,第二个组合具有焦点,然后调用我的方法 updateJTextPane()。为什么?
更新 2:
//Code from Netbeans generator
JComboBox myCbx = new javax.swing.JComboBox();
myCbx.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
myCbx.setName("myCbx"); // NOI18N
//My ItemListener
class myItemListener implements ItemListener{
public void itemStateChanged(ItemEvent ie) {
if (ie.getStateChange() == ItemEvent.SELECTED) { // Item was just selected
updateJTextPane();
}
}
}
//add item listener to combo
myCbx.addItemListener(new myItemListener());
更新3:内部类myItemListener被添加到同一个JDialog中的另外5个组合框,如果这在某种程度上很重要,我不知道谢谢