ComplexMenu.java

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*; // for Border, BorderFactory

/**
Demonstrate check boxes and radio buttons on menus.
*/
public class ComplexMenu extends JFrame
{
    public static void main(String[] argv)
    {
        ComplexMenu cm = new ComplexMenu();
        cm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        cm.show();
    }

    public ComplexMenu()
    {
        Toolkit kit = Toolkit.getDefaultToolkit();
        Dimension ss = kit.getScreenSize();
        setSize(ss.width/3,ss.height/3);
        setLocation(ss.width/4,ss.height/4);
        setTitle("CISC370-011 -- complex menu demo");

        Container cp = getContentPane();
        JPanel p = new JPanel();
        cp.add(p);

        JMenuBar mbar = new JMenuBar();
        setJMenuBar(mbar);
        JMenu fileMenu = new JMenu("File");
        mbar.add(fileMenu);
        JMenu dwarfMenu = new JMenu("Dwarfs");
        mbar.add(dwarfMenu);
        JMenu stoogeMenu = new JMenu("Stooges");
        mbar.add(stoogeMenu);

        JMenuItem exitItem = new JMenuItem("Exit");
        fileMenu.add(exitItem);
        exitItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e)
                { System.exit(0); }
            });

        JLabel stoogeLabel = new JLabel("No stooge",JLabel.LEFT);
        //stoogeLabel.setPreferredSize(new Dimension(200,30));
        p.add(stoogeLabel);

        JLabel dwarfLabel = new JLabel("No dwarf",JLabel.LEFT);
        //dwarfLabel.setPreferredSize(new Dimension(200,30));
        p.add(dwarfLabel);

        String[] stooges = {
            "Moe",
            "Larry",
            "Curly",
            "Joe",
            };
        ButtonGroup group = new ButtonGroup();
        for (int i=0; i<stooges.length; i++) {
            JRadioButtonMenuItem button = 
                new JRadioButtonMenuItem(stooges[i]);
            stoogeMenu.add(button);
            group.add(button);
            button.addActionListener(
                new StoogeChecker(stooges[i],stoogeLabel));
            if (i == 0)
                button.setSelected(true);
            }

        String[] dwarfs = {
            "Happy",
            "Sleepy",
            "Dopey",
            "Grumpy",
            "Sneezy",
            "Doc",
            "Bashful",
            };
        for (int i=0; i<dwarfs.length; i++) {
            JCheckBoxMenuItem box = 
                new JCheckBoxMenuItem(dwarfs[i]);
            dwarfMenu.add(box);
            box.setSelected(i%2 == 0);
            box.addActionListener(
                new DwarfChecker(dwarfs[i],dwarfLabel,box));
            }
    }
}


/**
An ActionListener to watch for changes in a JRadioButton.
*/
class StoogeChecker implements ActionListener
{
    public StoogeChecker(String name,JLabel label)
        { this.name = name;  this.label = label; }

    public void actionPerformed(ActionEvent e) {
        label.setText("Selected \"" + name + "\".");
        label.repaint();
        }

    private String name;
    private JLabel label;
}


/**
An ActionListener to watch for changes in a JCheckBox.
*/
class DwarfChecker implements ActionListener
{
    public DwarfChecker(String name,JLabel label,JCheckBoxMenuItem box)
    {
        this.name = name;
        this.label = label;
        this.box = box;
    }

    public void actionPerformed(ActionEvent e)
    {
        label.setText(name + " turned " + 
            (box.isSelected() ? "on" : "off"));
        label.repaint();
    }

    private String name;
    private JLabel label;
    private JCheckBoxMenuItem box;
}