• 9、JcomboBox下拉框事件监听


    9、JcomboBox下拉框事件监听


    JComboBox()的事件监听类ItemListener。其范例代码如下:

     1 import java.awt.*;
     2 import java.awt.event.*;
     3 import javax.swing.*;
     4 public class JComboBoxFrame extends JFrame
     5 {
     6     private JComboBox cb = new JComboBox();
     7     
     8     public JComboBoxFrame()
     9     {
    10         cb.addItem("1");
    11         cb.addItem("2");
    12         cb.addItem("3");
    13         
    14         cb.addItemListener(new ItemListener()
    15             {
    16                 public void itemStateChanged(ItemEvent event)
    17                 {
    18                     switch (event.getStateChange())
    19                     {
    20                     case ItemEvent.SELECTED: 
    21                         System.out.println("选中" + event.getItem());
    22                         break;
    23                     case ItemEvent.DESELECTED:
    24                         System.out.println("取消选中"+event.getItem());
    25                         break;
    26                     }
    27                 }
    28             });
    29         
    30         add(cb);
    31     }
    32     
    33     public static void main(String[] args)
    34     {
    35         JFrame frame = new JComboBoxFrame();
    36         frame.pack();
    37         frame.setVisible(true);
    38         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    39     }
    40 } 

          程序在执行时总是被触发两次。查找了一些资料发现,与ItemListener类中的itemStateChanged()事件的itemState有关,itemState在这里的状态有两个,Selected 和 deSelected(即选中和未被选中),所以,当改变下拉列表中被选中的项的时候,其实是触发了两次事件,第一次是上次被选中的项的 State 由 Selected 变为 deSelected ,即取消选择, 第二次是本次被选中的项的 State 由 deSelected 变为 Selected ,即新选中,所以,必然的 ItemStateChanged 事件中的代码要被执行两次了。

    可通过如下方法解决:

    if(e.getStateChange() == ItemEvent.SELECTED){
      //要执行的代码
      }   即为当事件是选中某一项的时候,才执行该代码。

     也可以用如下方法:

     1 comboBox = new JComboBox();
     2     comboBox.addItemListener(new ItemListener() {
     3       public void itemStateChanged(final ItemEvent e) {
     4         int index = comboBox.getSelectedIndex();
     5         if (index != 0) { // ==0表示选中的事第一个
     6           String content = comboBox.getSelectedItem().toString();
     7           System.out.println("index222="
     8               + index + ", content=" + content);
     9         }
    10       }
    11     });
  • 相关阅读:
    初中几何
    角平分线导致的三角形内外角关系
    解方程
    初中|数学题目整理
    求一次函数解析式
    整式的四则运算
    分式方程
    做辅助线的方法
    线段相等的证明思路
    python2.7安装sqlite3模块
  • 原文地址:https://www.cnblogs.com/hthuang/p/3468262.html
Copyright © 2020-2023  润新知