我的面板上有一个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内部也将起作用。

09-12 09:49