The JMenu class represents the anchored menus attached to a JMenuBar or another JMenu. Menus directly attached to a menu bar are called top-level menus. Submenus, on the other hand, are not attached to a menu bar but to a menu item that serves as its title. This menu item title is typically marked by a right arrow, indicating that its menu appears alongside the menu item if the user selects it.
import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*; public class MenuExample extends JPanel { public JTextPane pane; public JMenuBar menuBar; public MenuExample() { menuBar = new JMenuBar(); JMenu formatMenu = new JMenu("Justify"); formatMenu.setMnemonic('J'); MenuAction leftJustifyAction = new MenuAction("Left", new ImageIcon("left.gif")); MenuAction rightJustifyAction = new MenuAction("Right", new ImageIcon("right.gif")); MenuAction centerJustifyAction = new MenuAction("Center", new ImageIcon("center.gif")); MenuAction fullJustifyAction = new MenuAction("Full", new ImageIcon("full.gif")); JMenuItem item; item = formatMenu.add(leftJustifyAction); item.setMnemonic('L'); item = formatMenu.add(rightJustifyAction); item.setMnemonic('R'); item = formatMenu.add(centerJustifyAction); item.setMnemonic('C'); item = formatMenu.add(fullJustifyAction); item.setMnemonic('F'); menuBar.add(formatMenu); menuBar.setBorder(new BevelBorder(BevelBorder.RAISED)); } class MenuAction extends AbstractAction { public MenuAction(String text, Icon icon) { super(text, icon); } public void actionPerformed(ActionEvent e) { try { pane.getStyledDocument().insertString(0, "Action [" + e.getActionCommand() + "] performed!\n", null); } catch (Exception ex) { ex.printStackTrace(); } } } public static void main(String s[]) { MenuExample example = new MenuExample(); example.pane = new JTextPane(); example.pane.setPreferredSize(new Dimension(250, 250)); example.pane.setBorder(new BevelBorder(BevelBorder.LOWERED)); JFrame frame = new JFrame("Menu Example"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setJMenuBar(example.menuBar); frame.getContentPane().add(example.pane, BorderLayout.CENTER); frame.pack(); frame.setVisible(true); } }