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