在监听KDComboBox的时候,代码总是执行2次,这个原因一直没找到,当时也懒的深究,以为是控件的Bug。
comboBox.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { comboBox_itemStateChanged(e); } }); protected void comboBox_itemStateChanged(ItemEvent e) { System.out.println("comboBox"); }
执行结果:
comboBox
comboBox
可以通过调试,明显知道执行了2次逻辑。
以前的解决方案:
ItemListener listener;//定义类变量 //监听 listener = new ItemListener() { public void itemStateChanged(ItemEvent e) { comboBox_itemStateChanged(e); } }; comboBox.addItemListener(listener); //方法: comboBox_itemStateChanged(ItemEvent e){ System.out.println("comboBox"); comboBox.removeItemListener(listener); comboBox.addItemListener(listener); }
以上方法并不科学,执行了一次之后将listener remove,然后再添加listener,当时并不了解comboBox_itemStateChanged的逻辑,导致很多代码都这样写了。今天看到一篇文章,才知道这样写是错误的。
在JComboBox的监听事件时总是执行两次,原因如下:
ItemListener类中的方法itemStateChanged()事件的itemState有关,itemState在这里的状态有两个,Selected 和 deSelected(即选中和未被选中)
所以,当改变下拉列表中被选中的项的时候,其实是触发了两次事件:
第一次是上次被选中的项的 State 由 Selected 变为 deSelected ,即取消选择
第二次是本次被选中的项的 State 由 deSelected 变为 Selected ,即新选中,所以,必然的 ItemStateChanged 事件中的代码要被执行两次了。加上最外面的if语句,就可以解决这个问题。
简单理解,当下拉框从item1下拉选择item2的时候,相当于 item1从Selected->deSelected ,item2从deSelected-Selected,使用才执行了2次,知道了原因之后,发现以前的代码写的多么不规范了,害死人啊。
ComboBox后台的实现可能是item1、item2都是CheckBox,下拉事件item1状态从选中变成取消执行一次,item2由取消状态变成选中状态执行一次导致的。
解决方法如下
protected void comboBox_itemStateChanged(ItemEvent e) { if (e.getStateChange() == ItemEvent.SELECTED && e.getSource() == comboBox) { System.out.println("comboBox"); } }
e.getSource() == comboBox//这个判断也能省略的,如果没有多个comboBox公用一个监听
protected void comboBox_itemStateChanged(ItemEvent e) { if (e.getStateChange() == ItemEvent.SELECTED) { System.out.println("comboBox"); } }
相关推荐
Java的JComboBox是一个非常有用的组件,它允许用户在下拉列表中选择一个或多个选项。在GUI编程中,处理JComboBox的事件是提高用户交互性和应用程序功能的关键部分。本篇文章将深入探讨Java中JComboBox的事件处理机制...
在实际应用中,我们还可以为`JComboBox`添加事件监听器,以便在用户选择或输入新值时执行相应的操作。例如,我们可以监听`ActionEvent`,当用户按下回车键或者从下拉列表中选择一个选项时触发: ```java comboBox....
为了实现动态绑定,通常会在用户操作`JComboBox`时触发事件,如选择变更,然后根据新的选择重新查询数据库并更新组件。例如,使用`ActionListener`监听选择事件: ```java comboBox.addActionListener(e -> { ...
Java `JComboBox` 是 Swing 组件库中的一个控件,用于在下拉列表中显示一组可选择的选项。它提供了一个简单的用户界面,允许用户从预定义的选项中进行单选。`JComboBox` 在 Java 图形用户界面(GUI)编程中非常常见...
在Java Swing库中,`JComboBox`通常用于创建下拉列表,它允许用户从一组预定义的选项中选择一个。然而,默认情况下,`JComboBox`只支持单选操作。但根据你的需求,我们可以通过自定义组件来实现多选功能。在标题...
在本示例中,主要通过监听`JComboBox`的选择变化事件,并根据选择结果动态创建新的`JComboBox`来实现级联效果。具体来说,当用户在一个`JComboBox`中做出选择后,程序会触发级联逻辑,创建新的`JComboBox`并将其添加...
swing入门必看示例( oracle 官方swingset3示例) swingset3-oracle 运行包, 双击...基本组件:ToggleButtons/JButton/JComboBox/ProgressBar/Slider/Spinner/TextFeild/JEditorPane 选择器:JColorChooser/JOptionPane
2. 组件间的交互:通过`ActionListener`或`ItemListener`监听`JComboBox`的选择事件,当选择改变时触发`JList`的更新。 3. 模型管理:对于`JComboBox`,我们可以使用`DefaultComboBoxModel`来存储文件夹路径;对于`...
下拉列表 JComboBox 是 Java 中的一种 GUI 组件,用于提供用户选择多个选项。通常情况下,我们需要在 JComboBox 中显示一组选项,而实际上选项的值却不同于显示的文字。这时,我们可以自定义一个类,实现 ...
支持自动过滤可选项的JComboBox 支持键盘选择、鼠标选择
#### 二、创建JComboBox实例 创建`JComboBox`实例的方法很简单: ```java Object[] mark = {"Option1", "Option2", "Option3"}; // 选项数组 JComboBox<String> jComboBox = new JComboBox(mark); // 创建...
在Java编程中,`JComboBox` 是Swing库中用于创建下拉选择框的组件,它允许用户从一组预定义的选项中进行选择。当需要为`JComboBox`添加图像时,可以创建自定义的组合框模型,将每个选项与对应的图片关联起来,以提供...
在Java Swing库中,`JComboBox`和`JCheckBox`是两种常见的组件,它们分别用于创建下拉选择框和复选框。`JComboBox`提供了一个可扩展的列表,用户可以从中选择一个或多个选项,而`JCheckBox`则允许用户在一组选项中...
Java Swing JComboBox 下拉列表框是一种常用的 GUI 组件,它允许用户从多个选项中选择一个值。下面将详细介绍 JComboBox 的基本概念、常用构造方法、常用方法和示例代码。 JComboBox 的基本概念 JComboBox 是一个...
- Java Swing提供了事件监听机制,开发者可以注册监听器到`JComboBox`,在用户做出选择时触发相应事件,如`ItemListener`或`ActionListener`,从而更新其他联动的下拉框。 5. **XML数据存储**: - 标签提到XML...
在Java GUI编程中,`JComboBox`是Swing库中一个重要的组件,它用于创建具有下拉选择功能的控件。在默认情况下,`JComboBox`的外观可能并不符合所有用户的审美,尤其是在早期版本的Java中,其设计相对简单且略显陈旧...
在Java编程中,`JComboBox` 是Swing库中的一个组件,用于创建下拉选择框。这个组件允许用户从预定义的一组选项中选择一个。` ComboModel` 是`JComboBox`的核心,它管理着下拉列表中的所有数据。本教程将深入探讨如何...
`JTable`用于展示二维表格数据,而`JComboBox`则是一种下拉选择框,可以提供多个选项供用户选择。在某些场景下,我们可能需要在`JTable`的某一列中嵌入`JComboBox`,以实现更加灵活的数据输入方式。本篇将详细介绍...
在Java Swing中,`JTable`是一个非常重要的组件,用于展示二维数据,而`JComboBox`则是一个下拉选择框,常用于提供多种选择给用户。当你需要在`JTable`的某一列中嵌入可选择的下拉列表时,`JComboBox`就派上了用场。...
【Java程序设计任务驱动式教程】的第20章,"选择之道",主要讲解了在Java GUI编程中如何使用选择控件和处理选择事件,以实现用户交互。这一章节涵盖了多个关键知识点: 1. **选择控件**: - **JComboBox**: 用于...