9、JcomboBox下拉框事件监听


JComboBox()的事件监听类ItemListener。其范例代码如下:

 import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JComboBoxFrame extends JFrame
{
private JComboBox cb = new JComboBox(); public JComboBoxFrame()
{
cb.addItem("1");
cb.addItem("2");
cb.addItem("3"); cb.addItemListener(new ItemListener()
{
public void itemStateChanged(ItemEvent event)
{
switch (event.getStateChange())
{
case ItemEvent.SELECTED:
System.out.println("选中" + event.getItem());
break;
case ItemEvent.DESELECTED:
System.out.println("取消选中"+event.getItem());
break;
}
}
}); add(cb);
} public static void main(String[] args)
{
JFrame frame = new JComboBoxFrame();
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

程序在执行时总是被触发两次。查找了一些资料发现,与ItemListener类中的itemStateChanged()事件的itemState有关,itemState在这里的状态有两个,Selected 和 deSelected(即选中和未被选中),所以,当改变下拉列表中被选中的项的时候,其实是触发了两次事件,第一次是上次被选中的项的 State 由 Selected 变为 deSelected ,即取消选择, 第二次是本次被选中的项的 State 由 deSelected 变为 Selected ,即新选中,所以,必然的 ItemStateChanged 事件中的代码要被执行两次了。

可通过如下方法解决:

if(e.getStateChange() == ItemEvent.SELECTED){
  //要执行的代码
  }   即为当事件是选中某一项的时候,才执行该代码。

也可以用如下方法:

 comboBox = new JComboBox();
comboBox.addItemListener(new ItemListener() {
public void itemStateChanged(final ItemEvent e) {
int index = comboBox.getSelectedIndex();
if (index != 0) { // ==0表示选中的事第一个
String content = comboBox.getSelectedItem().toString();
System.out.println("index222="
+ index + ", content=" + content);
}
}
});

最新文章

  1. <textarea>输入框提示文字
  2. Tkprof工具详解一
  3. 更强的微光闪烁效果--第三方开源--Shimmer-android
  4. [LightOJ1004]Monkey Banana Problem(dp)
  5. 【双十一到了,准备买书了么?】推荐几本c/c++入手的书籍
  6. ObjectInput read方法的坑
  7. SWFUpload多文件上传 文件数限制 setStats()
  8. PostgreSQL数据的导出导入 save your data!
  9. WinForm 基础
  10. AngularJS中使用的表单验证
  11. 构建高并发&高可用&安全的IT系统-高并发部分
  12. 面向对象写的简单的colors rain
  13. H5 _拖放使用
  14. php通过某个日期段的周几,获取选中周几对应的日期
  15. [UE4]Child Widget 留白 padding
  16. C++中 top()与pop()
  17. python约束 异常 MD5 日志处理
  18. Css_*^$
  19. ctags简易用法
  20. SpringBoot(四)-- 整合Servlet、Filter、Listener

热门文章

  1. 【转】JavaScript中使用ActiveXObject操作本地文件夹的方法
  2. robotium问答
  3. 1.Maven的安装及配置
  4. 1px 究竟是多大
  5. java线程池ThreadPoolExector源码分析
  6. ios 视频拼接/合成
  7. js中计算两个日期之差
  8. AngularJS学习笔记4
  9. gulp基于seaJs模块化项目打包实践【原创】
  10. Oracle的登陆问题和初级学习增删改查(省略安装和卸载)