JComboBox选择更改侦听器?

All*_*nde 138 java swing jcombobox itemlistener

无论什么时候做出选择,我都试图让事件发生JComboBox.

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

我试过用actionPerformed(),但它永远不会开火.

如果没有超越模型JComboBox,我就没有想法了.

如何获得有关选择更改的通知JComboBox?**

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

jod*_*ell 152

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

combo.addActionListener (new ActionListener () {
    public void actionPerformed(ActionEvent e) {
        doSomething();
    }
});
Run Code Online (Sandbox Code Playgroud)

@John Calsbeek正确地指出它addItemListener()也会起作用.ItemEvents但是,您可以获得2 ,其中一个用于取消选择先前选择的项目,另一个用于选择新项目.只是不要使用这两种事件类型!

  • 我更喜欢ItemListener(只需确保检查ItemEvent以查看它是选择还是取消选择).即使选择未更改(即,如果用户单击已选择的项目),也可以触发ActionListener.这可能是也可能不是你想要的. (44认同)
  • 我知道这个问题很老,但为了补充,如果调用addItem方法,也会触发ActionListener. (6认同)

Via*_*lav 145

代码ItemListener实现示例

class ItemChangeListener implements ItemListener{
    @Override
    public void itemStateChanged(ItemEvent event) {
       if (event.getStateChange() == ItemEvent.SELECTED) {
          Object item = event.getItem();
          // do something with object
       }
    }       
}
Run Code Online (Sandbox Code Playgroud)

现在我们只获得选定的项目.

然后只需将侦听器添加到您的JComboBox

addItemListener(new ItemChangeListener());
Run Code Online (Sandbox Code Playgroud)

  • @dmark我认为这是合理的,因为没有任何改变.也许你应该以某种方式重新组织你的行为而不依赖于这种情况. (4认同)
  • 我尝试了这段代码,一个问题是,当我单击已选择的项目时,将不会触发侦听器,因为没有状态更改。 (2认同)

Joh*_*eek 22

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


Ahu*_*zda 11

这里创建一个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
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

  • 这个答案增强了之前的答案...?请不要重复!不相关:从不对组件进行任何手动调整大小/定位,这是合适的LayoutManager的专有任务 (3认同)

小智 7

你可以尝试这些

 int selectedIndex = myComboBox.getSelectedIndex();
Run Code Online (Sandbox Code Playgroud)

-要么-

Object selectedObject = myComboBox.getSelectedItem();
Run Code Online (Sandbox Code Playgroud)

-要么-

String selectedValue = myComboBox.getSelectedValue().toString();
Run Code Online (Sandbox Code Playgroud)