Skip to Main Content

Java SE (Java Platform, Standard Edition)

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Programmatically close menu

843807Feb 7 2010 — edited Feb 7 2010
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
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Mar 7 2010
Added on Feb 7 2010
2 comments
526 views