MenuDemo.java

Right-click to demonstrate very simple popup menu

Menu Demo, written by Fred Swartz Java Programming Notes

Download source MenuDemo.java


MenuDemo.java

// File   : gui/components/menus/MenuDemo.java
// Purpose: GUI for menu demo.  Subclasses JFrame.
//          Shows dropdown and popup menus, mnemonic and accelerator keys.
// Author : Fred Swartz - Placed in public domain.
// Date   : 2000-04-26 (Rota), 2002-05-01 (Sicilia), 2006-10-04 (Pfalz)

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

////////////////////////////////////////////////////////////////// MenuDemo
class MenuDemo extends JFrame {
    //============================================================== fields
    private JTextArea m_editArea = new JTextArea(20, 50);

    //... Menuitems are instance variables when they are referenced
    //    in a listener, eg, to en-/disabled them.
    private JMenuItem m_copyItem;
    private JMenuItem m_pasteItem;

    private JPopupMenu m_popup = new JPopupMenu();

    //========================================================== constructor
    public MenuDemo() {
        // (1) Create menu items and set their mnemonic, accelerator, enabled.
        m_copyItem = new JMenuItem("Copy");
            m_copyItem.setEnabled(false);
            m_copyItem.setAccelerator(KeyStroke.getKeyStroke("control C"));
        m_pasteItem = new JMenuItem("Paste");
            m_pasteItem.setEnabled(false);
            m_pasteItem.setAccelerator(KeyStroke.getKeyStroke("control V"));
        JMenuItem openItem = new JMenuItem("Open...");
            openItem.setMnemonic('O');
            openItem.setAccelerator(KeyStroke.getKeyStroke("control O"));
        JMenuItem quitItem = new JMenuItem("Quit");
            quitItem.setMnemonic('Q');
            quitItem.setAccelerator(KeyStroke.getKeyStroke("control Q"));

        // (2) Build  menubar, menus, and add menuitems.
        JMenuBar menubar = new JMenuBar();  // Create new menu bar
            JMenu fileMenu = new JMenu("File"); // Create new menu
                fileMenu.setMnemonic('F');
                menubar.add(fileMenu);      // Add menu to the menubar
                fileMenu.add(openItem);     // Add menu item to the menu
                fileMenu.addSeparator();    // Add separator line to menu
                fileMenu.add(quitItem);
            JMenu editMenu = new JMenu("Edit");
                fileMenu.setMnemonic('E');
                menubar.add(editMenu);
                editMenu.add(m_copyItem);
                editMenu.add(m_pasteItem);

        // (3) Add listeners to menu items
        openItem.addActionListener(new OpenAction());
        quitItem.addActionListener(new QuitAction());


        //... Add the (unused) text area to the content pane.
        JPanel content = new JPanel();
        content.setLayout(new BorderLayout());
        content.add(m_editArea, BorderLayout.CENTER);

        //... Add menu items to popup menu, add popup menu to text area.
        m_popup.add(new JMenuItem("Testing"));
        m_editArea.setComponentPopupMenu(m_popup);

        //... Set the JFrame's content pane and menu bar.
        setContentPane(content);
        setJMenuBar(menubar);

        setTitle("Menu Demo");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setLocationRelativeTo(null);  // Center window.
    }

    ///////////////////////////////////////////////////////////// OpenAction
    class OpenAction implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            JOptionPane.showMessageDialog(MenuDemo.this, "Can't Open.");
        }
    }

    ///////////////////////////////////////////////////////////// QuitAction
    class QuitAction implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            System.exit(0);  // Terminate the program.
        }
    }

    //================================================================= main
    public static void main(String[] args) {
        JFrame win = new MenuDemo();
        win.setVisible(true);
    }
}


Maintained by John Loomis, updated Sun Jul 05 12:14:10 2015