我的面板上有一個JComboBox。其中一個彈出菜單項是「更多」,當我點擊該菜單項時,我獲取更多菜單項並將它們添加到現有列表中。在此之後,我希望保持彈出菜單處於打開狀態,以便用戶意識到已獲取更多物品,但彈出窗口關閉。我使用的事件處理程序代碼如下如何在填充JComboBox的時候打開彈出菜單?
public void actionPerformed(ActionEvent e)
{
if (e.getSource() == myCombo) {
JComboBox selectedBox = (JComboBox) e.getSource();
String item = (String) selectedBox.getSelectedItem();
if (item.toLowerCase().equals("more")) {
fetchItems(selectedBox);
}
selectedBox.showPopup();
selectedBox.setPopupVisible(true);
}
}
private void fetchItems(JComboBox box)
{
box.removeAllItems();
/* code to fetch items and store them in the Set<String> items */
for (String s : items) {
box.addItem(s);
}
}
爲什麼如預期的那樣showPopup()和setPopupVisible()方法不能正常工作,我不明白。
謝謝..它的工作。我必須創建一個實現Runnable接口的新內部類,並將JComboBox實例傳遞給內部類的構造函數,因爲run()中的box對象將超出fetchItems()函數的範圍。 – Stormshadow 2010-05-06 06:52:27
@Stormshadow:不,你不需要創建一個內部類;一個更簡單的解決方案是將框聲明爲final:private void fetchItems(final JComboBox box)。然後這個答案中的代碼將完美地工作。 – jfpoilpret 2010-05-07 01:41:43