我的面板上有一个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()方法无法按预期运行。
最佳答案
在fetchItems方法中添加以下行
SwingUtilities.invokeLater(new Runnable(){
public void run()
{
box.showPopup();
}
}
如果您调用selectedBox.showPopup();在invokelater内部也将起作用。