我要监听JCheckBox 打勾与不打勾的情况,但是发现一个问题,只有当JCheckBox打勾后,后面才会触发ItemListener,
如果一开始JCheckBox 没有打勾的话就不会触发itemStateChanged,一定要打勾后才会触发事件监听,请问各位前辈是否时java的一个bug?代码片段如下: public void itemStateChanged(ItemEvent e){
        Object obj=e.getItem();
        if(obj.equals(this.chsdf)){
            if(this.chsdf.isSelected()){
                System.out.println("ok");
            }else{
                System.out.println("sdf");
            }
        }
        
    }
 private JCheckBox chsdf = new JCheckBox();
this.chsdf.setSelected(false);//此时不会触发itemStateChanged
//this.chsdf.setSelected(true);//触发itemStateChanged
setSelected(false)时为何没有触发itemStateChanged,是否时java的一个bug(本人用jdk1.5),恳请高手解答。

解决方案 »

  1.   

    沒有這個問題~  我試驗了 ~  就是你的代碼:final JCheckBox jcb = new JCheckBox();
    itemListener = new ItemListener(){ public void itemStateChanged(ItemEvent e) {

     Object obj=e.getItem(); 
            if(obj.equals(jcb)){ 
                if(jcb.isSelected()){ 
                    System.out.println("ok"); 
                }else{ 
                    System.out.println("sdf"); 
                } 
            } 
    }

    };
    jcb.setSelected(false);
    jcb.addItemListener(itemListener);
      

  2.   

    请问楼上的你运行后不操作jcb 有打印除sdf吗?
    我贴出全部代码import java.awt.Rectangle;
    import java.awt.event.ItemEvent;
    import java.awt.event.ItemListener;
    import javax.swing.JCheckBox;
    import javax.swing.JPanel;public class MainClass extends JPanel {    ItemListener itemListener = new ItemListener() {        public void itemStateChanged(ItemEvent e) {            Object obj = e.getItem();
                if(obj.equals(chsdf)) {
                    if(chsdf.isSelected()) {
                        System.out.println("ok");
                    }
                    else {
                        System.out.println("sdf");
                    }
                }        }    };    public MainClass() {
            try {
                jbInit();
                this.chsdf.setSelected(false);//此时为何没有触发itemStateChanged
            }
            catch(Exception ex) {
                ex.printStackTrace();
            }
        }    final JCheckBox chsdf = new JCheckBox();    public static void main(String[] args) {        try {        }
            catch(Exception e) {
                System.out.println(e);
            }
        }    public void jbInit() throws Exception {
            this.setLayout(null);        chsdf.setText("jCheckBox1");
            chsdf.setBounds(new Rectangle(216, 66, 85, 23));
            this.add(chsdf);
            this.chsdf.addItemListener(itemListener);
        }}请问直接运行后有打印出“sdf”的吗?
      

  3.   

    這個監聽是監聽事件變化,JCheckBox默認就是false,也就是不選擇,所以你初始化為false,也可以理解為沒有事件的變化~當然就不會執行監聽的代碼了~
      

  4.   

    哦对哦,是itemStateChanged哦,不变化的话当然是不会触发了哦,谢谢。