Table of Contents
We would, of course, like to have menus in our frames.
Here’s how to do it.
A Simple Menu Example
Here’s a simple menu example:
package swingExamples;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
public class SimpleMenu extends JFrame
{
public SimpleMenu(String title)
{
setTitle(title);
// Create menu bar with menu
JMenu fileMenu = new JMenu("File");
fileMenu.add("New...");
fileMenu.add("Open...");
fileMenu.add("Save");
fileMenu.add("Save As...");
fileMenu.addSeparator();
fileMenu.add("Quit");
JMenuBar menuBar = new JMenuBar();
menuBar.add(fileMenu);
setJMenuBar(menuBar);
}
public static void main(String[] args)
{
SimpleMenu frame = new SimpleMenu("SimpleMenu");
frame.setSize(300, 200);
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
which produces:

Of course, you can click on the menu items all you want, but they won’t do anything for you.
For that you need events…
A More Complex Menu Example
If you want to add other menus (including a popup menu), and actually hook up some of the actions, here’s how you might do it.
Here, we make some more complex menu structures, including a pop-up menu. We show a simple example of how to hook up a menu item (the Help -> About MenuTest… item) so that it will respond appropriately.
package swingExamples;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.ButtonGroup;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import javax.swing.JRadioButtonMenuItem;
public class ComplexMenu extends JFrame
implements ActionListener
{
public ComplexMenu(String title)
{
super(title);
// Create menu bar with menus
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
// File menu
JMenu fileMenu = new JMenu("File");
menuBar.add(fileMenu);
fileMenu.add("New...");
fileMenu.add("Open...");
fileMenu.add("Save");
fileMenu.add("Save As...");
fileMenu.addSeparator();
m_quit = new JMenuItem("Quit");
m_quit.addActionListener(this);
fileMenu.add(m_quit);
// Edit menu
JMenu editMenu = new JMenu("Edit");
menuBar.add(editMenu);
editMenu.add("Cut");
editMenu.add("Copy");
editMenu.add("Paste");
// Shape menu
JMenu shapeMenu = new JMenu("Shape");
menuBar.add(shapeMenu);
shapeMenu.add(getShapesSubMenu());
shapeMenu.add("Properties...");
// Help menu
JMenu helpMenu = new JMenu("Help");
menuBar.add(helpMenu);
helpMenu.add("Help Overview...");
helpMenu.add("Help Topics...");
m_about = new JMenuItem("About MenuTest...");
m_about.addActionListener(this);
helpMenu.add(m_about);
// Create the popup menu.
JPopupMenu popupMenu = new JPopupMenu();
addShapes(popupMenu);
// Add listener to components that
// can bring up popup menus.
MouseListener popupListener =
new PopupListener(popupMenu);
addMouseListener(popupListener);
}
private JMenu getShapesSubMenu()
{
JMenu shapesSubMenu = new JMenu("Shapes");
addShapes(shapesSubMenu);
return shapesSubMenu;
}
private void addShapes(JComponent menu)
{
ButtonGroup group = new ButtonGroup();
JRadioButtonMenuItem square =
new JRadioButtonMenuItem("Square", true);
group.add(square);
menu.add(square);
JRadioButtonMenuItem circle =
new JRadioButtonMenuItem("Circle");
group.add(circle);
menu.add(circle);
JRadioButtonMenuItem triangle =
new JRadioButtonMenuItem("Triangle");
group.add(triangle);
menu.add(triangle);
menu.add(getPropertiesSubMenu());
}
private JMenu getPropertiesSubMenu()
{
ButtonGroup group = new ButtonGroup();
JMenu propertiesSubMenu = new JMenu("Properties");
JRadioButtonMenuItem solid =
new JRadioButtonMenuItem("Solid", true);
group.add(solid);
propertiesSubMenu.add(solid);
JRadioButtonMenuItem outline =
new JRadioButtonMenuItem("Outline");
group.add(outline);
propertiesSubMenu.add(outline);
return propertiesSubMenu;
}
public void actionPerformed(ActionEvent event)
{
Object obj = event.getSource();
if (obj == m_quit)
{
System.exit(0);
}
else if (obj == m_about)
{
showAboutBox();
}
}
private void showAboutBox()
{
JOptionPane.showMessageDialog(
this,
" MenuTest 1.0\n" +
" by\n" +
" Bryan J. Higgs\n" +
" October 31, 2000\n" +
" HAPPY HALLOWEEN!",
"About MenuTest",
JOptionPane.INFORMATION_MESSAGE);
}
public static void main(String[] args)
{
ComplexMenu frame = new ComplexMenu("MenuTest");
frame.setSize(300, 200);
frame.setVisible(true);
}
/////////////// Inner classes /////////////////
class PopupListener
extends MouseAdapter
{
PopupListener(JPopupMenu menu)
{
m_popup = menu;
}
public void mousePressed(MouseEvent e)
{
maybeShowPopup(e);
}
public void mouseReleased(MouseEvent e)
{
maybeShowPopup(e);
}
private void maybeShowPopup(MouseEvent e)
{
if (e.isPopupTrigger())
{
m_popup.show(e.getComponent(),
e.getX(), e.getY());
}
}
///////////// Private Data /////////////
private JPopupMenu m_popup;
}
///////// Private Data ///////
private JMenuItem m_quit;
private JMenuItem m_about;
}
Here’s what it produces:






