我想实现一个当JCheckBox被选中时弹出颜色选择对话框的程序(默认初始化时不选中)
但以下代码在点击选中时可以弹出对话框,但是选好颜色后主窗体的那个JCheckBox不显示选中状态,请问哪里有问题?jcbHighlight.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent e){
if(e.getStateChange()==ItemEvent.SELECTED){
colorHighlight=JColorChooser.showDialog(settingFrame, "Choose temp color", Color.RED);
}
else{
colorHighlight=null;
}
            }
});

解决方案 »

  1.   

    因为你没有设置选中,你只是判断它是否被选择了。应该有setSelected之类的方法吧,
     if(e.getStateChange()==ItemEvent.SELECTED){
    //在这里set下
                        colorHighlight=JColorChooser.showDialog(settingFrame, "Choose temp color", Color.RED);
                    }
    set一下
      

  2.   


    谢谢。
    首先我觉得Java应该把它设计成点击之后就显示选中,就像不添加Listener时那样。但为什么只是添加了一个Listener后就不会显示选中了呢?
    然后我试过setSelected()方法,但这样又会重新触发一次这个Listener
    我也试过判断jcbHighlight.isSelected(),但这样也不行,会一直触发Listener
      

  3.   

    不可能说添加监听后就无法选中啊,应该是楼主哪里写的有问题。swing内部的监听器是基于责任链模式的。你添加一个监听是不会把原来的覆盖的。
      

  4.   

    我是小白,不懂,一般我是这样写:
    jcbHighlight.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e){
                    if(jcbHighlight.isSelected()){
                        colorHighlight=JColorChooser.showDialog(settingFrame, "Choose temp color", Color.RED);
                    }
                    else{
                        colorHighlight=null;
                    }
                }
            });