java jcombobox 事件_JComboBox事件响应

写在最前

最近一段时间都十分忙,一直没有时间更新这边的文章,好在清明小假期终于能有一段调整的时间了,今日继续。

摘要

对于日常Swing开发,JComboBox添加事件响应是十分常见的工作内容之一。一般来说,常用的手段有addItemListener及addActionListener。那么两者异同在在什么地方?何时该用ItemListener,而又何时该用ActionListener呢?

适用场景

1. 当JComboBox选择内容发生变化时ItemListener会响应2次,而ActionListener会响应1次;

2. 当JComboBox选择内容未发生变化时ItemListener会响应0次,而ActionListener会响应1次;

示例代码:

JComboBox combox = new JComboBox();

combox.addItem("AAA");

combox.addItem("BBB");

combox.addItem("CCC");

combox.addItemListener(e -> System.out.println("itemStateChanged"));

combox.addActionListener(e -> System.out.println("actionPerformed"));

现象:

当第一次选择“BBB”时,输出为:

itemStateChanged

itemStateChanged

actionPerformed

当再一次选择“BBB”时,输出为:

actionPerformed

进一步分析

替换实例代码如下:

combox.addItemListener(e -> System.out.println(e));

combox.addActionListener(e -> System.out.println(e));

重复上述操作,当第一次选择“BBB”时,输出为:

java.awt.event.ItemEvent[ITEM_STATE_CHANGED,item=AAA,stateChange=DESELECTED] on javax.swing.JComboBox[,0,0,196x74,layout=com.apple.laf.AquaComboBoxUI$AquaComboBoxLayoutManager,alignmentX=0.0,alignmentY=0.0,border=,flags=16777536,maximumSize=,minimumSize=,preferredSize=,isEditable=false,lightWeightPopupEnabled=true,maximumRowCount=8,selectedItemReminder=AAA]

java.awt.event.ItemEvent[ITEM_STATE_CHANGED,item=BBB,stateChange=SELECTED] on javax.swing.JComboBox[,0,0,196x74,layout=com.apple.laf.AquaComboBoxUI$AquaComboBoxLayoutManager,alignmentX=0.0,alignmentY=0.0,border=,flags=16777536,maximumSize=,minimumSize=,preferredSize=,isEditable=false,lightWeightPopupEnabled=true,maximumRowCount=8,selectedItemReminder=BBB]

java.awt.event.ActionEvent[ACTION_PERFORMED,cmd=comboBoxChanged,when=1490977820123,modifiers=Button1] on javax.swing.JComboBox[,0,0,196x74,layout=com.apple.laf.AquaComboBoxUI$AquaComboBoxLayoutManager,alignmentX=0.0,alignmentY=0.0,border=,flags=16777536,maximumSize=,minimumSize=,preferredSize=,isEditable=false,lightWeightPopupEnabled=true,maximumRowCount=8,selectedItemReminder=BBB]

当再一次选择“BBB”时,输出为:

java.awt.event.ActionEvent[ACTION_PERFORMED,cmd=comboBoxChanged,when=1490977820123,modifiers=Button1] on javax.swing.JComboBox[,0,0,196x74,layout=com.apple.laf.AquaComboBoxUI$AquaComboBoxLayoutManager,alignmentX=0.0,alignmentY=0.0,border=,flags=16777536,maximumSize=,minimumSize=,preferredSize=,isEditable=false,lightWeightPopupEnabled=true,maximumRowCount=8,selectedItemReminder=BBB]

看到这里,响应次数区别的原因就一目了然了,之所以当选择项发生变化时ItemListener会响应2次的原因为:

1. 当ItemEvent为DESELECTED及SELECTED时,ItemListener各响应了一次;

2. 当ActionEvent的comboBoxChanged时ActionListener一定会响应一次的。

总结

ItemListener及ActionListener两者的异同如下:

相同处:ItemListener ActionListener都是JCombobox的事件响应Listener;

不同处

选中项改变时ItemListener响应2次,选中项不变时ItemListener响应0次;

选中项改变时ActionListener响应1次,选中项不变时ActionListener响应1次;

ItemListener适用于因stateChange不同而进行不同事件响应的情况;

ActionListener适用于不论选中项是否发生变化都需要事件响应的情况;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值