如何检测哪个组合框状态发生了变化?

时间:2013-12-26 19:24:09

标签: java swing jcombobox itemlistener

我在表单中有两个JComboBox,我向他们添加了ItemListener,我应该覆盖itemStateChanged(),现在我想说是否选择了第一个JComboBox项目如果选择的第二个JComboBox项目做了另一件事,但是我不知道怎么办?也许代码可以帮助你。

public void itemStateChanged(ItemEvent e) {
if(e.getStateChange()==ItemEvent.SELECTED)
   picture.setIcon(pics[box.getSelectedIndex()]);
}        

在第二行代码中,我不知道如何识别哪个JComboBox状态已发生变化。

2 个答案:

答案 0 :(得分:3)

您可以使用ItemEvent#getSource()

示例:

public void itemStateChanged(ItemEvent e) {

if(e.getSource() instanceof JComboBox){
  JComboBox combo = (JComboBox) e.getSource();
  //rest of code
}

现在,对于来自combo1的不同combo2,您有2个选项,您可以像这样为这些组件设置名称。

combo1.setName("combo1");
combo2.setName("combo2");

并在itemListener

if(e.getSource() instanceof JComboBox){
  JComboBox combo = (JComboBox) e.getSource();

   if("combo1".equals(combo.getName())){
        // your code
   }
    .
    .// rest of code
}

或者,如果您知道它们是同一个实例,那么您始终可以使用==

   if(combo1 == e.getSource() ){
        // your code
   }else if (combo2 == e.getSource()){
        //code for combo 2
   }

答案 1 :(得分:2)

有两种方法可以做到这一点,第一种方法是检查事件对象上的源并查看它匹配的组合框。

另一种方法是在每个组合框中添加一个不同的监听器,然后你知道进入一个监听器的任何调用都来自相应的控件。这对匿名内部类很有用。