今天用到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(即选中和未被选中)
所以,当改变下拉列表中被选中的项的时候,其实是触发了两次事件:
第一次是上次被选中的项的 State 由 Selected 变为 deSelected ,即取消选择
第二次是本次被选中的项的 State 由 deSelected 变为 Selected ,即新选中,所以,必然的 ItemStateChanged 事件中的代码要被执行两次了。
分享到:
相关推荐
2. 组件间的交互:通过`ActionListener`或`ItemListener`监听`JComboBox`的选择事件,当选择改变时触发`JList`的更新。 3. 模型管理:对于`JComboBox`,我们可以使用`DefaultComboBoxModel`来存储文件夹路径;对于`...
按钮可以触发特定的事件,例如执行一个函数或方法。在Java中,按钮可以通过ActionListener接口来监听用户的点击操作,实现事件处理。 2. **Swing动画**:Swing允许开发者创建动态效果,通过定时器(Timer)和组件的...
`ZZZ`类继承自`JFrame`,并实现了`ActionListener`接口,这意味着它可以响应Swing组件触发的事件。 ##### 2. 用户界面初始化 ```java public ZZZ() { // 初始化组件 String[] xl1 = {"美元USD", "人民币CNY", ...
7. **菜单事件**:在Windows应用程序中,设置菜单项的Caption属性和ShortCut属性,按下相应的快捷键或点击菜单项会触发Click事件。按Alt+D不会触发,因为'&'字符定义了D作为快捷键。 8. **数据库操作**:在数据库中...
- `&` 和 `|` 是位逻辑运算符,它们总是计算两侧的操作数。 #### 第三章 控制结构 **1. Java 选择、循环结构的使用** - **if-else** 语句用于简单的条件判断。 - **switch-case** 语句用于多分支条件判断。 - **...
8. **直到型循环**:直到型循环至少能执行一次循环体,这是因为它首先执行循环体,然后检查条件是否满足继续执行的要求。(正确) 9. **Word 2003 替换操作**:使用替换操作不仅可以删除空格和回车,还可以替换文档...
- **JComboBox**:组合框,下拉列表组件。 - **JList**:列表组件,用于显示一个项目列表。 #### Java Swing 布局管理器 - **FlowLayout**:流布局,组件按顺序从左到右、从上到下的顺序放置。 - **BorderLayout**...
比如,当用户点击一个按钮时,会触发一个事件,然后由对应的事件处理器(事件监听器)来处理这个事件,执行相应的功能,如添加商品到购物车。 5. **数据持久化** ArchiesGUI需要存储用户的选择和购物车信息,这...
7. **循环结构**:`do-while`循环在检查条件之前至少执行一次循环体。 8. **数组访问**:访问数组元素时,索引从0开始,所以`a[1]`对应于数组中的第二个元素。如果索引超出范围,会出现数组越界异常。 9. **...
初始时`x`为10,每次循环`x`减1,因此会执行3次循环,打印三个星号。 **正确答案**: B.*** #### 3. 内存回收情况 - **代码段**: ```java class U { int x, int y; U(int a, int b){x= a; y = b;} void copy...