BoxDemo.java

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

/**
Demonstrate Box layout.
*/
public class BoxDemo extends JFrame
{
    public static void main(String[] argv)
    {
        BoxDemo t = new BoxDemo();
        t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        t.show();
    }

    public BoxDemo()
    {
        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 -- box layout demo");

        Container cp = getContentPane();
        Box p = Box.createVerticalBox();
        cp.add(p);

        p.add(Box.createVerticalGlue());

        // A label showing the currently-selected stooge.
        // The label is centered in a raised bevel border.
        JPanel stoogePanel = new JPanel();
        JLabel stoogeLabel = new JLabel("No stooge",JLabel.CENTER);
        stoogePanel.add(stoogeLabel);
        p.add(stoogePanel);
        Border b1 = BorderFactory.createRaisedBevelBorder();
        stoogePanel.setBorder(b1);
        p.add(Box.createVerticalGlue());

        // A label showing the most recently changed dwarf.
        // The label is centered in a lowered bevel border.
        JPanel dwarfPanel = new JPanel();
        JLabel dwarfLabel = new JLabel("No dwarf",JLabel.CENTER);
        dwarfPanel.add(dwarfLabel);
        p.add(dwarfPanel);
        Border b2 = BorderFactory.createLoweredBevelBorder();
        dwarfPanel.setBorder(b2);
        p.add(Box.createVerticalGlue());

        Box px = Box.createHorizontalBox();
        p.add(px);
        px.add(Box.createHorizontalGlue());

        // Select exactly one stooge from a list of four contained
        // in a vertical box with a labelled, etched border.
        String[] stooges = {
            "Moe",
            "Larry",
            "Curly",
            "Joe",
            };
        Box p3 = Box.createVerticalBox();
        p3.setMinimumSize(new Dimension(120,100));
        ButtonGroup group = new ButtonGroup();
        for (int i=0; i<stooges.length; i++) {
            JRadioButton button = new JRadioButton(stooges[i]);
            p3.add(button);
            group.add(button);
            button.addActionListener(
                new StoogeChecker(stooges[i],stoogeLabel));
            if (i == 0)
                button.setSelected(true);
            }
        Border b3temp = BorderFactory.createEtchedBorder();
        Border b3 = BorderFactory.createTitledBorder(b3temp,"Stooges");
        p3.setBorder(b3);
        px.add(p3);
        px.add(Box.createHorizontalGlue());

        // Select zero or more dwarfs from a set of check boxes
        // contained in a vertical box with a labelled, etched 
        // border.
        String[] dwarfs = {
            "Happy",
            "Sleepy",
            "Dopey",
            "Grumpy",
            "Sneezy",
            "Doc",
            "Bashful",
            };
        Box p4 = Box.createVerticalBox();
        p4.setMinimumSize(new Dimension(120,100));
        for (int i=0; i<dwarfs.length; i++) {
            JCheckBox box = new JCheckBox(dwarfs[i]);
            p4.add(box);
            box.setSelected(i%2 == 0);
            box.addActionListener(
                new DwarfChecker(dwarfs[i],box,dwarfLabel));
            }
        Border b4temp = BorderFactory.createEtchedBorder();
        Border b4 = BorderFactory.createTitledBorder(b4temp,"Dwarfs");
        p4.setBorder(b4);
        px.add(p4);
        px.add(Box.createHorizontalGlue());

        p.add(Box.createVerticalGlue());
    }
}


/**
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); }

    private String name;
    private JLabel label;
}


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

    public void actionPerformed(ActionEvent e)
        { label.setText(name + " -> " + box.isSelected()); }

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