I have a JMenu to which I have added some standard menu items plus a JList. Everything works fine except for the fact that once you choose something from the list, the menu doesn't close. I have tried adding various things in the ListSelectionListener for the JList (e.g. menu.setVisible(false), but nothing works. SSCCE below. How do I get the menu to close? Thanks.
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class MenuList {
private JLabel label;
private JMenu templateMenu;
public MenuList() {
JFrame frame = new JFrame("Menu List Demo");
frame.setLocation(100,100);
JPanel panel = new JPanel(new BorderLayout());
panel.setPreferredSize(new Dimension(300,400));
label = new JLabel("test");
templateMenu = new JMenu("Templates");
JMenuItem create = new JMenuItem("Create...");
JMenuItem save = new JMenuItem("Save...");
JMenu submenu = new JMenu("More");
submenu.add(new JMenuItem("Test"));
templateMenu.add(create);
templateMenu.add(save);
templateMenu.add(submenu);
templateMenu.addSeparator();
JPanel listPanel = new JPanel(new BorderLayout());
String[] choices = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p"};
JList list = new JList(choices);
JScrollPane listScroll = new JScrollPane(list);
list.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
JList list = (JList) e.getSource();
String choice = (String) list.getSelectedValue();
label.setText(choice);
//What goes here to close the menu?
}
});
listPanel.add(listScroll);
templateMenu.add(listPanel);
JMenuBar menuBar = new JMenuBar();
menuBar.add(new JMenu("File"));
menuBar.add(templateMenu);
panel.add(menuBar, BorderLayout.NORTH);
panel.add(label, BorderLayout.CENTER);
frame.add(panel);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
new MenuList();
}
}
Edited by: Bob.B on Feb 7, 2010 5:14 AM