9、JcomboBox下拉框事件监听

9、JcomboBox下拉框事件监听

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

 1 import java.awt.*;
 2 import java.awt.event.*;
 3 import javax.swing.*;
 4 public class JComboBoxFrame extends JFrame
 5 {
 6     private JComboBox cb = new JComboBox();
 7     
 8     public JComboBoxFrame()
 9     {
10         cb.addItem("1");
11         cb.addItem("2");
12         cb.addItem("3");
13         
14         cb.addItemListener(new ItemListener()
15             {
16                 public void itemStateChanged(ItemEvent event)
17                 {
18                     switch (event.getStateChange())
19                     {
20                     case ItemEvent.SELECTED: 
21                         System.out.println("选中" + event.getItem());
22                         break;
23                     case ItemEvent.DESELECTED:
24                         System.out.println("取消选中"+event.getItem());
25                         break;
26                     }
27                 }
28             });
29         
30         add(cb);
31     }
32     
33     public static void main(String[] args)
34     {
35         JFrame frame = new JComboBoxFrame();
36         frame.pack();
37         frame.setVisible(true);
38         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
39     }
40 } 

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

可通过如下方法解决:

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

 也可以用如下方法:

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏salesforce零基础学习

salesforce 零基础学习(五十二)Trigger使用篇(二)

第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代...

1779
来自专栏HT

自绘制HT For Web ComboBox下拉框组件

传统的HTML5的下拉框select只能实现简单的文字下拉列表,而HT for Web通用组件中ComboBox不仅能够实现传统HTML5下拉框效果,而且可以在...

2026
来自专栏菩提树下的杨过

打印机设置(PrintDialog)、页面设置(PageSetupDialog) 及 RDLC报表如何选择指定打印机

如果一台电脑同时连接多个打印机,而且每个打印机使用的纸张大小各不相同(比如:票据打印钱用的小票专用张,办公打印机用的是A4标准纸),在处理打印类的需求时,如果不...

2147
来自专栏程序你好

在WPF桌面程序中使用ECharts展示图表

1073
来自专栏Golang语言社区

新功能Go modules介绍

A module is a collection of related go packages. Modules are the unit of source ...

3050
来自专栏JadePeng的技术博客

ASP.NET MVC 开源项目Kigg解读(1)

Kigg是一个很好的ASP.NET MVC范例项目,本着研究的目的,对Kigg进行解读。 ASP.NET MVC Linq To SQL MS Patter...

2766
来自专栏用户2442861的专栏

Qt学习之路_14(简易音乐播放器)

http://www.cnblogs.com/tornadomeet/archive/2012/09/23/2699077.html

411
来自专栏hightopo

自绘制HT For Web ComboBox下拉框组件

943
来自专栏张善友的专栏

Quartz.net官方开发指南 第八课:SchedulerListeners

SchedulerListeners同TriggerListeners及JobListeners非常相似,SchedulerListeners只接收与特定tri...

18810
来自专栏Google Dart

Flutter 构建完整应用手册-处理手势

我们不仅希望向用户展示信息,还希望我们的用户与我们的应用进行互动! 那么,我们如何回应基本操作,如点击和拖动? 我们将使用GestureDetector部件!

862

扫码关注云+社区