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