每当从JComboBox
.
我遇到的问题是没有明显的addSelectionListener()
方法。
我试过使用actionPerformed()
,但它永远不会触发。
没有覆盖 的模型JComboBox
,我没有想法。
如何在JComboBox
?**上收到选择更改的通知?
编辑:我必须道歉。事实证明我使用了一个行为不端的子类JComboBox
,但我会留下这个问题,因为你的回答很好。
每当从JComboBox
.
我遇到的问题是没有明显的addSelectionListener()
方法。
我试过使用actionPerformed()
,但它永远不会触发。
没有覆盖 的模型JComboBox
,我没有想法。
如何在JComboBox
?**上收到选择更改的通知?
编辑:我必须道歉。事实证明我使用了一个行为不端的子类JComboBox
,但我会留下这个问题,因为你的回答很好。
它应该响应ActionListeners,如下所示:
combo.addActionListener (new ActionListener () {
public void actionPerformed(ActionEvent e) {
doSomething();
}
});
@John Calsbeek正确地指出这addItemListener()
也行得通。但是,您可能会得到 2 ItemEvents
,一个用于取消选择先前选择的项目,另一个用于选择新项目。只是不要同时使用这两种事件类型!
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());
如果jodonnell的解决方案失败,我会尝试接口的itemStateChanged()
方法。ItemListener
下面是创建一个 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
}
});
你可以试试这些
int selectedIndex = myComboBox.getSelectedIndex();
-或者-
Object selectedObject = myComboBox.getSelectedItem();
-或者-
String selectedValue = myComboBox.getSelectedValue().toString();
我最近一直在寻找这个相同的解决方案,并设法找到一个简单的解决方案,而无需为最后一个选定项目和新选定项目分配特定变量。这个问题虽然很有帮助,但并没有提供我需要的解决方案。这解决了我的问题,我希望它能解决你和其他人的问题。谢谢。
你可以用 jdk >= 8 做到这一点
getComboBox().addItemListener(this::comboBoxitemStateChanged);
所以
public void comboBoxitemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
YourObject selectedItem = (YourObject) e.getItem();
//TODO your actitons
}
}
我用这个:
cb = new JComboBox<String>();
cb.setBounds(10, 33, 46, 22);
panelConfig.add(cb);
for(int i = 0; i < 10; ++i)
{
cb.addItem(Integer.toString(i));
}
cb.addItemListener(new ItemListener()
{
@Override
public void itemStateChanged(ItemEvent e)
{
if(e.getID() == temEvent.ITEM_STATE_CHANGED)
{
if(e.getStateChange() == ItemEvent.SELECTED)
{
JComboBox<String> cb = (JComboBox<String>) e.getSource();
String newSelection = (String) cb.getSelectedItem();
System.out.println("newSelection: " + newSelection);
}
}
}
});