我的目标是:
在JComboBox CC上加一个Listener,作用是只监听鼠标点击,即只有当用鼠标来选择JComboBox的选项时,才发生某个动作。
奇怪的是,当我在通过一个JButton的点击调用CC.setSelectedItem("22")时,也会被Listener捕获到?为什么啊?
怎么样才能使setSelectedItem方法不被Listener听到?代码如下:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;public class HelloWorld {
public static void main(String args[]){
JFrame FF = new JFrame();
FF.setLayout(new GridLayout(0,2));
JButton BB = new JButton("Test");
final JComboBox CC = new JComboBox();
CC.addItem("11");
CC.addItem("22");
CC.addItem("33");
BB.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e){
CC.setSelectedItem("22");
}
});
CC.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent e){
if (e.getStateChange() == e.SELECTED) {
System.out.println("Mod's caught by ItemListener!");
}
}
});
FF.add(CC);
FF.add(BB);
FF.setBounds(100, 100, 300, 100);
FF.setVisible(true);
FF.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

解决方案 »

  1.   

    用同一个方法
    http://community.csdn.net/Expert/topic/4810/4810393.xml?temp=.062298BB.addMouseListener(new MouseAdapter(){
    public void mouseClicked(MouseEvent e){
                                        jb.putClientProperty(key,Boolean.valueOf(false)); CC.setSelectedItem("22");
                                        jb.putClientProperty(key,Boolean.valueOf(false)); }
    });
    LZ还有更好的方法???
      

  2.   

    在调用CC.setSelectedItem("22")之前,
    先用 removeItemListener(ItemListener aListener) 移除监听器,在调用CC.setSelectedItem("22")之后,
    再用 addItemListener(ItemListener aListener) 添加监听器,
      

  3.   

    借光:路过的各位,帮忙看看这几个帖子,看怎么解决;)谢谢啦!关于客户端页面从数据库中读取大量图片的问题
    http://community.csdn.net/Expert/TopicView3.asp?id=4816106乱码还原问题!
    http://community.csdn.net/Expert/TopicView3.asp?id=4813786关于javabean反射代理的问题
    http://community.csdn.net/Expert/TopicView3.asp?id=4813935