我刚才给你做了以下测试,没有问题的。
JComboBox c = new JComboBox();
class itemChangedClass implements ItemListener{
      public void itemStateChanged(ItemEvent e){
        System.out.println(e);
      }
    }
c.addItemListener(new itemChangedClass());
改变一次结果如下:
---------------------------------------------------------------------
java.awt.event.ItemEvent[ITEM_STATE_CHANGED,item=Ebullient,stateChange=DESELECTED] on javax.swing.JComboBox[,204,5,97x27,layout=javax.swing.plaf.metal.MetalComboBoxUI$MetalComboBoxLayoutManager,alignmentX=null,alignmentY=null,border=,flags=328,maximumSize=,minimumSize=,preferredSize=,isEditable=false,lightWeightPopupEnabled=true,maximumRowCount=8,selectedItemReminder=Ebullient]java.awt.event.ItemEvent[ITEM_STATE_CHANGED,item=Recalcitrant,stateChange=SELECTED] on javax.swing.JComboBox[,204,5,97x27,layout=javax.swing.plaf.metal.MetalComboBoxUI$MetalComboBoxLayoutManager,alignmentX=null,alignmentY=null,border=,flags=328,maximumSize=,minimumSize=,preferredSize=,isEditable=false,lightWeightPopupEnabled=true,maximumRowCount=8,selectedItemReminder=Recalcitrant]也就是说,你改变一次,产生了两个事件:取消选择原来的item,选择现在的item

BTW:你为什么不用addActionListener,这样的话,选中一个就会产生一个事件,可以获取被选中的item,多好!

解决方案 »

  1.   

    我肯定我的代码没问题,一个很简单的程序,我把程序贴出来吧。public class dlgPxxx extends JDialog
    {
      JComboBox combSspx = new JComboBox();
      int countBss = 1;  private void jbInit() throws Exception 
      {
        combSspx.addItemListener(new dlgPxxx_combSspx_itemAdapter(this)); 
      }  void combSspx_itemStateChanged(ItemEvent e)
      {
        System.out.println(intCount);
        intCount++;
      }
    }class dlgPxxx_combSspx_itemAdapter implements java.awt.event.ItemListener {
      dlgPxxx adaptee;  dlgPxxx_combSspx_itemAdapter(dlgPxxx adaptee) {
        this.adaptee = adaptee;
      }
      public void itemStateChanged(ItemEvent e) {
        adaptee.combSspx_itemStateChanged(e);
      }
    }
      

  2.   

    comboBox.addItemListener(new ItemListener()
    {
       public void itemStateChanged(ItemEvent event)
       {
    if (event.getStateChange() == ItemEvent.SELECTED)
             {} if(event.getStateChange() == ItemEvent.DESELECTED)
             {}
       }

    });
    上面的就是为什么你单击时会出现两次的原因了
      

  3.   

    homeness(胡同里的小猫):
    那为什么有的选项我选择时,ItemStateChanged事件只执行一次?有的选项还导致事件被执行了四次?这具体又是怎么回事呢?怎么解释呢?高手们!
      

  4.   

    高手们:
    为什么用JCombobox的itemstateChanged事件处理起来这么麻烦,你们一般都用这个事件吗?
    还是换别的listener,我就觉得actionlistener处理起来就比itemlistener好,因为它始终就执行一遍,你说呢?高手们?
      

  5.   

    这个我出看到过,用ItemListener会执行两次(没有判断),后来是用ActionListener解决的!
      

  6.   

    xiaoyongjun (菜鸟),你这个问题我也遇到过,我也不知道是怎么回事,想来可能是java的一个bug,有时候就是会执行两次的。用ActionListener没有问题,只是麻烦些。不过没有遇到执行四次的情况
      

  7.   

    xiaoyongjun (菜鸟),要是解决了别忘了告诉我,多谢了
      

  8.   

    用ActionListener多好啊,反正我就是用的这个,楼主可以看看JDK的API文档,输入JComboBox,里面有一个How to Use Combo Boxes,说的比较的详细,一看就会了
      

  9.   

    大家看看这段话,应该就能明白为什么执行两次了,这样做处理起来真是麻烦,执行两遍肯定没有执行一遍速度快,效率高,对吧?所以我还是决定用ActionPerformed事件,大家还有什么不同的看法?Comboboxes also generate item events, which are fired when any of the items' selection state changes. Only one item at a time can be selected in a combo box, so when the user makes a new selection the previously selected item becomes unselected. Thus two item events are fired each time the user selects a different item from the menu. If the user chooses the same item, no item events are fired.
      

  10.   

    解决方法如下:
    if (e.getStateChange() == ItemEvent.SELECTED)
    if (e.getStateChange() == ItemEvent.Unselected)
    combobox.addItemListener(this);
    ...
    public void itemStateChanged(ItemEvent e) {
        if (e.getStateChange() == ItemEvent.SELECTED) {
            label.setVisible(true);
            ...
        } else {
            label.setVisible(false);
        }
    }