我是这么做的,局部相关代码:
class BadHabbitGroup implements ItemListener {

Checkbox Smoke = new Checkbox("吸烟");
Checkbox Drink = new Checkbox("酗酒");

public void BadHabbitGroupAdd(Panel p) {
p4.setLayout(new FlowLayout(FlowLayout.LEFT));
p4.add(Habbit1);
p4.add(Smoke);p4.add(Drink);
Smoke.addItemListener(this);
Drink.addItemListener(this); /*此处设置监听器不成功*/
} @Override
public void itemStateChanged(ItemEvent e) {
// TODO Auto-generated method stub
if (e.getSource() == Smoke) {
System.out.println("选中了吸烟");
} else if (e.getSource() == Drink) {
System.out.println("Drink selected");
}
}

}
这样产生是问题是:用System.out.println("Drink selected")测试是否产生动作的时候,无论是选中还是取消,都会打印这句话,我想要的是选中时是一个动作,取消时候是另外一个动作,应该用什么方法???是removeItemListener吗???

解决方案 »

  1.   

    这个要自己做判断,即取ItemEvent中的属性,判断是选中还取消,再分别是选中和取消作处理
      

  2.   

    楼主你这是什么的代码 看不懂啊 有点类似ext啊
      

  3.   

    楼上你搞笑么。这哪里是EXT。这是Swing.
    和2楼所说一样。你先判断是否CHECKED,用个IF ELSE 分别产生不同的动作
      

  4.   

    http://topic.csdn.net/u/20110622/08/d7af8464-b7c4-44df-bd09-e8fd6ef7a390.html可以看看这个。
      

  5.   


    public void itemStateChanged(ItemEvent e) {
            //在JComboBox的监听事件时总是执行两次,原因如下:
            //ItemListener类中的方法itemStateChanged()事件的itemState有关,itemState在这里的状态有两个,Selected 和 deSelected(即选中和未被选中)
            //所以,当改变下拉列表中被选中的项的时候,其实是触发了两次事件:
            //第一次是上次被选中的项的 State 由 Selected 变为 deSelected ,即取消选择
            //第二次是本次被选中的项的 State 由 deSelected 变为 Selected ,即新选中,所以,必然的 ItemStateChanged 事件中的代码要被执行两次了。
            //加上最外面的if语句,就可以解决这个问题。
            if(e.getStateChange() == ItemEvent.SELECTED) {
                if(e.getSource() == college) {
                    int index = college.getSelectedIndex();
                    major.setModel(new DefaultComboBoxModel(map.get(index)));
                } else if(e.getSource() == major) {
                    JOptionPane.showMessageDialog(this, "你选择的是:" + college.getSelectedItem() + "的" + major.getSelectedItem() + "专业!");
                }
            }        
        }