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