JMenu and MenuBar - potatoscript/JavaSwing GitHub Wiki

🎯 JMenu and MenuBar in Java Swing 🍽️


📝 What are JMenu and MenuBar?

In Java Swing, the JMenu and MenuBar are components used to create menu bars and dropdown menus in your graphical user interface (GUI). These components allow you to organize different actions or options in your application.

  • JMenuBar is the top-level container for menus in a Swing application.
  • JMenu represents a single menu within the JMenuBar.
  • JMenuItem represents individual items that are placed inside a JMenu to perform actions.

Features of JMenu and MenuBar:

  • Organized Menu Options: Create structured and easy-to-use navigation for actions.
  • Dropdown Menus: Easily toggle between different menu items.
  • Actions Triggered by Menu Items: Use ActionListeners to handle user interaction with menu items.
  • Separation of Concerns: Keeps the application's actions and UI organized and easy to manage.

📚 Step 1: Creating a Basic Menu Bar

Let's start by creating a simple application with a menu bar that has one menu (File) and two menu items (Open and Exit).


📝 Example: Creating a Simple Menu Bar

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

public class MenuBarExample {
    public static void main(String[] args) {
        // Create JFrame
        JFrame frame = new JFrame("Menu Bar Example");

        // Create Menu Bar
        JMenuBar menuBar = new JMenuBar();

        // Create 'File' Menu
        JMenu fileMenu = new JMenu("File");

        // Create 'Open' Menu Item
        JMenuItem openItem = new JMenuItem("Open");
        openItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.out.println("Open File");
            }
        });

        // Create 'Exit' Menu Item
        JMenuItem exitItem = new JMenuItem("Exit");
        exitItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.exit(0); // Exit the application
            }
        });

        // Add items to 'File' Menu
        fileMenu.add(openItem);
        fileMenu.add(exitItem);

        // Add 'File' Menu to the Menu Bar
        menuBar.add(fileMenu);

        // Set the Menu Bar on the frame
        frame.setJMenuBar(menuBar);

        // Set frame properties
        frame.setSize(300, 200);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

🎨 Explanation

  • JMenuBar menuBar = new JMenuBar();

    • This creates the menu bar for the frame.
  • JMenu fileMenu = new JMenu("File");

    • This creates the File menu that will appear on the menu bar.
  • JMenuItem openItem = new JMenuItem("Open");

    • This creates a "Open" menu item inside the File menu.
  • openItem.addActionListener(...);

    • This adds an action listener to the Open menu item. When clicked, it will print "Open File" to the console.
  • fileMenu.add(openItem);

    • This adds the Open menu item to the File menu.
  • frame.setJMenuBar(menuBar);

    • This sets the menuBar to be the menu bar of the JFrame.

👩‍🎨 Output:

A menu bar appears at the top of the window with a File menu. When you click File, you see the Open and Exit options.


🎯 Step 2: Adding Multiple Menus to the Menu Bar

You can add more menus to the JMenuBar. For example, we will add an Edit menu with Copy and Paste options.


📝 Example: Adding Multiple Menus to the Menu Bar

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

public class MultiMenuExample {
    public static void main(String[] args) {
        // Create JFrame
        JFrame frame = new JFrame("Multiple Menus Example");

        // Create Menu Bar
        JMenuBar menuBar = new JMenuBar();

        // Create 'File' Menu
        JMenu fileMenu = new JMenu("File");
        JMenuItem openItem = new JMenuItem("Open");
        openItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.out.println("Open File");
            }
        });
        fileMenu.add(openItem);

        // Create 'Edit' Menu
        JMenu editMenu = new JMenu("Edit");
        JMenuItem copyItem = new JMenuItem("Copy");
        copyItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.out.println("Copy Action");
            }
        });
        JMenuItem pasteItem = new JMenuItem("Paste");
        pasteItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.out.println("Paste Action");
            }
        });
        editMenu.add(copyItem);
        editMenu.add(pasteItem);

        // Add menus to the menu bar
        menuBar.add(fileMenu);
        menuBar.add(editMenu);

        // Set the Menu Bar on the frame
        frame.setJMenuBar(menuBar);

        // Set frame properties
        frame.setSize(300, 200);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

🎨 Explanation

  • JMenu editMenu = new JMenu("Edit");

    • This creates the Edit menu that will also appear on the menu bar.
  • editMenu.add(copyItem); and editMenu.add(pasteItem);

    • These lines add the Copy and Paste items inside the Edit menu.
  • menuBar.add(editMenu);

    • Adds the Edit menu to the menu bar along with the File menu.

👩‍🎨 Output:

The window will show a menu bar with two menus:

  • File (containing the Open option)
  • Edit (containing Copy and Paste options)

🎯 Step 3: Adding Keyboard Shortcuts to Menu Items

You can also assign keyboard shortcuts to menu items, which makes your application more accessible and user-friendly.


📝 Example: Adding Keyboard Shortcuts

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

public class KeyboardShortcutsExample {
    public static void main(String[] args) {
        // Create JFrame
        JFrame frame = new JFrame("Menu Shortcuts Example");

        // Create Menu Bar
        JMenuBar menuBar = new JMenuBar();

        // Create 'File' Menu
        JMenu fileMenu = new JMenu("File");
        JMenuItem openItem = new JMenuItem("Open");
        openItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_DOWN_MASK));
        openItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.out.println("Open File (Ctrl+O)");
            }
        });
        fileMenu.add(openItem);

        // Create 'Exit' Menu Item
        JMenuItem exitItem = new JMenuItem("Exit");
        exitItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_DOWN_MASK));
        exitItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });
        fileMenu.add(exitItem);

        // Add 'File' Menu to Menu Bar
        menuBar.add(fileMenu);

        // Set the Menu Bar on the frame
        frame.setJMenuBar(menuBar);

        // Set frame properties
        frame.setSize(300, 200);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

🎨 Explanation

  • openItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_DOWN_MASK));

    • This sets a keyboard shortcut (Ctrl+O) for the Open menu item.
  • exitItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_DOWN_MASK));

    • This sets a keyboard shortcut (Ctrl+X) for the Exit menu item.

👩‍🎨 Output:

  • The Open menu item can be triggered using Ctrl+O.
  • The Exit menu item can be triggered using Ctrl+X.