2008-09-12 112 views
126

我試圖從JComboBox中選擇一個事件來觸發事件。JComboBox選擇更改監聽器?

我遇到的問題是沒有明顯的addSelectionListener()方法。我試過使用actionPerformed()但它永遠不會啓動。

重寫JComboBox的模型我不知道。

如何獲得JComboBox上的選擇更改通知?

編輯:我必須道歉事實證明我是用的JComboBox行爲異常的子類,但我會離開的問題以來你的回答是好。開始投票。 :)

+0

很好的問題,因爲我已經注意到,上的actionPerformed加載一個組合框火災,但不是在選擇時,一個會期待它。 – 2013-07-15 15:42:12

回答

129

應該到ActionListeners迴應,就像這樣:

combo.addActionListener (new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
     doSomething(); 
    } 
}); 

@John Calsbeek正確地指出,addItemListener()會工作,太。但是,您可能會得到2 ItemEvents,一個用於取消選擇先前選擇的項目,另一個用於選擇新項目。只是不要使用兩種事件類型!

+42

我更喜歡ItemListener(只要確保檢查ItemEvent以查看它是否是選擇或取消選擇)。即使選擇沒有改變(即,如果用戶點擊已經選擇的項目),ActionListener也可以被觸發。這可能是也可能不是你想要的。 – 2008-09-12 16:42:57

+4

我知道這個問題很舊,但爲了補充,如果調用addItem方法,ActionListener也會被觸發。 – 2015-02-23 16:01:23

21

如果jodonnell的解決方案失敗,我會嘗試ItemListener接口的itemStateChanged()方法。

7

您可以嘗試的ItemListener執行這些

int selectedIndex = myComboBox.getSelectedIndex(); 

- 或 -

Object selectedObject = myComboBox.getSelectedItem(); 

- 或 -

String selectedValue = myComboBox.getSelectedValue().toString(); 
+0

我知道爲什麼這是downvoted,但我相信那些downvotes應該重新考慮......如果您在actionPerformed方法中檢查選定的索引,您會發現這起作用。它會觸發,排除-1事件將允許您排除開始時的錯誤觸發。解決了我的問題! – 2013-07-15 16:31:35

132

代碼示例

class ItemChangeListener implements ItemListener{ 
    @Override 
    public void itemStateChanged(ItemEvent event) { 
     if (event.getStateChange() == ItemEvent.SELECTED) { 
      Object item = event.getItem(); 
      // do something with object 
     } 
    }  
} 

現在我們只會得到選定的項目。

然後只需添加監聽到你的JComboBox

addItemListener(new ItemChangeListener()); 
+1

我試過這段代碼,其中一個問題是當我單擊已經選擇的項時,監聽器將不會被觸發,因爲沒有狀態改變。 – dmark 2016-02-23 00:19:15

4

我最近在尋找這非常相同的解決方案,並設法找到了一個簡單的不分配最後選擇商品和新選擇的項目的具體變量。這個問題雖然很有幫助,但並未提供我需要的解決方案。這解決了我的問題,我希望它解決了你和其他人。謝謝。

How do I get the previous or last item?

7

這裏是創建一個組合框增加了對項目選擇改變監聽器:

JComboBox comboBox = new JComboBox(); 

    comboBox.setBounds(84, 45, 150, 20); 
    contentPane.add(comboBox); 

    JComboBox comboBox_1 = new JComboBox(); 
    comboBox_1.setBounds(84, 97, 150, 20); 
    contentPane.add(comboBox_1); 
    comboBox.addItemListener(new ItemListener() { 
     public void itemStateChanged(ItemEvent arg0) { 
      //Do Something 
     } 
    }); 
}