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;
}