关于JComboBox触发事件总是执行两次的问题

本文介绍了一个关于Java Swing中JComboBox组件的问题:在为JComboBox添加ItemListener监听器时,每次选择变动都会触发两次事件。文章提供了解决方案,通过检查ItemEvent的状态来避免重复执行不必要的操作。
今天用到JcomBox,在JComboBox的监听事件时总是执行两次。

代码如下:

comboBox.addItemListener(new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e) {
                    comboSelect();     //执行两次
            }
        });

总是执行两次,后来查了相关资料,只要在 comboSelect() 之前加入一个 IF 判断,



 if(e.getStateChange() == ItemEvent.SELECTED){}

即可。

 

修改后的代码如下:

comboBox.addItemListener(new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e) {
                if(e.getStateChange() == ItemEvent.SELECTED){
                    comboSelect();   //修改后
                }
            }
        });

 

网上说的原因是:

ItemListener类中的方法itemStateChanged()事件的itemState有关,itemState在这里的状态有两个,Selected 和 deSelected(即选中和未被选中) Tp-Link路由器设置图解

所以,当改变下拉列表中被选中的项的时候,其实是触发了两次事件:

第一次是上次被选中的项的 State 由 Selected 变为 deSelected ,即取消选择

第二次是本次被选中的项的 State 由 deSelected 变为 Selected ,即新选中,所以,必然的 ItemStateChanged 事件中的代码要被执行两次了。

转载于:https://www.cnblogs.com/ctou45/archive/2011/05/12/2044025.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值