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     });

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM