JComboBox选择更改侦听器?

时间:2008-09-12 13:24:17

标签: java swing jcombobox itemlistener

每当从JComboBox做出选择时,我都会尝试触发事件。

我遇到的问题是没有明显的addSelectionListener()方法。

我尝试使用actionPerformed(),但它从未触发过。

如果没有覆盖JComboBox的模型,我就没有想法了。

如何通知JComboBox?**

的选择更改

编辑:我要道歉。事实证明我使用的是一个行为不端的JComboBox子类,但我会留下问题,因为你的答案很好。

7 个答案:

答案 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)

我最近在寻找这个相同的解决方案,并设法找到一个简单的解决方案,而不为最后选择的项目和新选择的项目分配特定变量。这个问题虽然非常有用,却没有提供我需要的解决方案。这解决了我的问题,我希望它能解决你的问题。感谢。

How do I get the previous or last item?

答案 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
    }
}