我的面板上有一个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