161

每当从JComboBox.

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

我试过使用actionPerformed(),但它永远不会触发。

没有覆盖 的模型JComboBox,我没有想法。

如何在JComboBox?**上收到选择更改的通知?

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

4

8 回答 8

183

它应该响应ActionListeners,如下所示:

combo.addActionListener (new ActionListener () {
    public void actionPerformed(ActionEvent e) {
        doSomething();
    }
});

@John Calsbeek正确地指出这addItemListener()也行得通。但是,您可能会得到 2 ItemEvents,一个用于取消选择先前选择的项目,另一个用于选择新项目。只是不要同时使用这两种事件类型!

于 2008-09-12T13:32:22.160 回答
167

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());
于 2013-01-20T12:28:37.360 回答
23

如果jodonnell的解决方案失败,我会尝试接口的itemStateChanged()方法。ItemListener

于 2008-09-12T13:33:50.613 回答
13

下面是创建一个 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
    }
});
于 2013-07-24T23:08:03.207 回答
9

你可以试试这些

 int selectedIndex = myComboBox.getSelectedIndex();

-或者-

Object selectedObject = myComboBox.getSelectedItem();

-或者-

String selectedValue = myComboBox.getSelectedValue().toString();
于 2010-02-02T19:38:08.893 回答
4

我最近一直在寻找这个相同的解决方案,并设法找到一个简单的解决方案,而无需为最后一个选定项目和新选定项目分配特定变量。这个问题虽然很有帮助,但并没有提供我需要的解决方案。这解决了我的问题,我希望它能解决你和其他人的问题。谢谢。

我如何获得上一个或最后一个项目?

于 2013-02-02T22:23:08.327 回答
3

你可以用 jdk >= 8 做到这一点

getComboBox().addItemListener(this::comboBoxitemStateChanged);

所以

public void comboBoxitemStateChanged(ItemEvent e) {
    if (e.getStateChange() == ItemEvent.SELECTED) {
        YourObject selectedItem = (YourObject) e.getItem();
        //TODO your actitons
    }
}
于 2020-11-05T06:29:38.153 回答
2

我用这个:

    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);
                }
            }
        }
    });
于 2021-08-17T17:18:48.653 回答