Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to keep the popup menu of a JComboBox open on populating it?

I have a JComboBox on my Panel. One of the popup menu items is 'More' and when I click that I fetch more menu items and add them to the existing list. After this, I wish to keep the popup menu open so that the user realizes that more items have been fetched however, the popup closes. The event handler code I am using is as follows

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);
        }
    }

I do not understand why the showPopup() and setPopupVisible() methods are not functioning as expected.

like image 285
Stormshadow Avatar asked Jan 23 '23 03:01

Stormshadow


1 Answers

add the following line in the fetchItems method

SwingUtilities.invokeLater(new Runnable(){

    public void run()
    {

       box.showPopup();
    }

}

If u call selectedBox.showPopup(); inside invokelater also it will work.

like image 55
sreejith Avatar answered Jan 29 '23 21:01

sreejith