Menus

File: java/Menus/Main.java

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

public class Main extends JFrame implements ActionListener {
    // Remember it in ivar so others can change its contents
    private MyCanvas canvas;

    public static void main (String [] args) {
	new Main();
    }

    public Main () {
	// Window setup
	setLocation (100, 100);
	setSize (300, 300);
	setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
	Container content = getContentPane();

	// Put something in our window
	canvas = new MyCanvas ();
	content.add (canvas);

	// Add a menu
	JMenu menu = new JMenu ("File");
	
	// And its items
	JMenuItem item = new JMenuItem ("First");
	menu.add (item);
	item.addActionListener (this);

	item = new JMenuItem ("Second");
	menu.add (item);
	item.addActionListener (this);

	item = new JMenuItem ("Quit");
	menu.add (item);
	item.addActionListener (this);

	// Add menu to a menu bar
	JMenuBar menuBar = new JMenuBar ();
	menuBar.add (menu);

	// Another menu
	JMenu menu2 = new JMenu ("Edit");

	// Some items for menu2
	item = new JMenuItem ("Edit-1");
	menu2.add (item);
	item.addActionListener (this);

	item = new JMenuItem ("Edit-2");
	menu2.add (item);
	item.addActionListener (this);

	item = new JMenuItem ("Edit-3");
	menu2.add (item);
	item.addActionListener (this);

	// Add menu2 to the menu bar
	menuBar.add (menu2);

	// Install menu bar in our window
	setJMenuBar (menuBar);

	setVisible (true);
    }

    // ActionListener method for all the pull-down menu items
    public void actionPerformed (ActionEvent e) {
	if (e.getActionCommand().equals ("Quit")) System.exit (0);
	else {
	    // Change the contents of canvas
	    canvas.setContent ("Menu item: " + e.getActionCommand());
	}
    }
}

File: java/Menus/MyCanvas.java

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

public class MyCanvas extends JComponent {
    // Remember it in ivar so can redraw
    private String content = "Waiting for menu item";

    // We provide, others can set our content
    public void setContent (String content) {
	this.content = content;
	repaint ();
    }

    // This is our draw callback
    public void paintComponent (Graphics g) {
	g.drawString (content, 100, 100);
    }
}