我是这么做的,局部相关代码:
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吗???
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吗???
解决方案 »
- 一个JTable用代码添加数据问题
- [求教]如何用sun.net包实现FTP获取服务端目录文件列表功能
- 双缓冲的问题!
- [110分]求javascript实现的类似java.net.URLEncoder.encode(String s) 的方法
- 如何从Graphics取得一个图形对象,再复制给另一个Image对象
- JA VA如何读取控制台输出(System.out.println();)的字符串?
- 请牛人帮我看看这个代码我哪里写错了
- 关于javamail.
- 请问怎么样通过数字签名使得Applet能访问本地文件系统和打印机
- 为什么objectoutputstream读取不到对象
- 【有图有码】昨天发的帖子,自己编辑不了,郁闷重新发一个
- java中怎么使容器中的组件排列方式是从上下排列呢?高手指点..
和2楼所说一样。你先判断是否CHECKED,用个IF ELSE 分别产生不同的动作
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() + "专业!");
}
}
}