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 条评论
登录 后参与评论

相关文章

来自专栏小白鼠

Ionic3 表单处理

在项目中,可以使用angular中的 @angular/forms模块处理表单,但是并不需要在app.module中引用@angular/forms模块,因为在...

491
来自专栏向前进

【笔记】移动端H5数字键盘input type=number的处理(IOS和Android)

在Vue中的项目,基于VUX-UI开发,一个常见的需求: 1、金额输入框 2、弹出数字键盘 3、仅支持输入两位小数,限制最大11位数,不允许0开头   后续...

2.5K5
来自专栏极乐技术社区

『组件』大转盘、刮刮乐、老虎机……

组件 框架为开发者提供了一系列基础组件,开发者可以通过组合这些基础组件进行快速开发。 什么是组件: 组件是视图层的基本组成单元。 组件自带一些功能与微信风格的样...

2946
来自专栏Kiba518

【我们一起写框架】MVVM的WPF框架(三)—数据控件

这世上,没人能一次性写出完美无缺的框架;因为,任何一个框架都需要项目的淬炼,然后才能升华,趋近完美。

883
来自专栏吴柯的运维笔记

48个Shell脚本小技巧(二)

23. 产生一个随机数 代码如下: echo $RANDOM 24. 按照模式split 文件 代码如下: csplit server.log ...

3107
来自专栏马洪彪

Java生成条码二维码

一、概述 可用barcode4j或zxing等第三方库,推荐zxing。 barcode4j资料链接:http://barcode4j.sourceforge....

4268
来自专栏Objective-C

Swift-MVVM 简单演练(一)

3814
来自专栏小黄人打代码

在Java中如何解析JSON格式数据?

1055
来自专栏移动端开发

Charts 常见使用类型实例

Charts是做什么的:        在我们平时的开发中,当使用到一些统计图表的时候,我们该怎样去做那些柱形的统计图、那些折线统计图、扇形统计图,亦或是你在做...

2048
来自专栏郭霖

Android图片加载框架最全解析(一),Glide的基本用法

现在Android上的图片加载框架非常成熟,从最早的老牌图片加载框架UniversalImageLoader,到后来Google推出的Volley,再到后来的新...

30211

扫码关注云+社区