每当从JComboBox
做出选择时,我都会尝试触发事件。
我遇到的问题是没有明显的addSelectionListener()
方法。
我尝试使用actionPerformed()
,但它从未触发过。
如果没有覆盖JComboBox
的模型,我就没有想法了。
如何通知JComboBox
?**
编辑:我要道歉。事实证明我使用的是一个行为不端的JComboBox
子类,但我会留下问题,因为你的答案很好。
答案 0 :(得分:149)
它应该响应ActionListeners,如下所示:
combo.addActionListener (new ActionListener () {
public void actionPerformed(ActionEvent e) {
doSomething();
}
});
@John Calsbeek正确指出addItemListener()
也会奏效。但是,您可以获得2 ItemEvents
,一个用于取消选择先前选择的项目,另一个用于选择新项目。只是不要使用这两种事件类型!
答案 1 :(得分:141)
ItemListener
实施的代码示例
class ItemChangeListener implements ItemListener{
@Override
public void itemStateChanged(ItemEvent event) {
if (event.getStateChange() == ItemEvent.SELECTED) {
Object item = event.getItem();
// do something with object
}
}
}
现在我们只会选择一个项目。
然后只需将侦听器添加到JComboBox
addItemListener(new ItemChangeListener());
答案 2 :(得分:22)
如果jodonnell的解决方案失败,我会尝试ItemListener
接口的itemStateChanged()
方法。
答案 3 :(得分:10)
这里创建一个ComboBox,为项目选择更改添加一个监听器:
JComboBox comboBox = new JComboBox();
comboBox.setBounds(84, 45, 150, 20);
contentPane.add(comboBox);
JComboBox comboBox_1 = new JComboBox();
comboBox_1.setBounds(84, 97, 150, 20);
contentPane.add(comboBox_1);
comboBox.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent arg0) {
//Do Something
}
});
}
答案 4 :(得分:7)
您可以尝试这些
int selectedIndex = myComboBox.getSelectedIndex();
-OR -
Object selectedObject = myComboBox.getSelectedItem();
-OR -
String selectedValue = myComboBox.getSelectedValue().toString();
答案 5 :(得分:4)
我最近在寻找这个相同的解决方案,并设法找到一个简单的解决方案,而不为最后选择的项目和新选择的项目分配特定变量。这个问题虽然非常有用,却没有提供我需要的解决方案。这解决了我的问题,我希望它能解决你的问题。感谢。
答案 6 :(得分:0)
您可以使用jdk> = 8
完成此操作getComboBox().addItemListener(this::comboBoxitemStateChanged);
如此
public void comboBoxitemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
YourObject selectedItem = (YourObject) e.getItem();
//TODO your actitons
}
}