UNB/ CS/ David Bremner/ teaching/ java/ ChoiceTest.java
import java.awt.Container;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.border.EtchedBorder;
import javax.swing.border.TitledBorder;

public class ChoiceTest
{  public static void main(String[] args)
   {  ChoiceFrame frame = new ChoiceFrame();
      frame.setTitle("ChoiceTest");
      frame.show();      
   }
}

class ChoiceFrame extends JFrame
{  public ChoiceFrame()
   {  final int DEFAULT_FRAME_WIDTH = 300;
      final int DEFAULT_FRAME_HEIGHT = 300;
      setSize(DEFAULT_FRAME_WIDTH, DEFAULT_FRAME_HEIGHT);

      addWindowListener(new WindowCloser());
      
      // construct components

      sampleField = new JTextField
         ("Computing Concepts with Java Essentials");
      sampleField.setEditable(false);

      ChoiceListener listener = new ChoiceListener();

      facenameCombo = new JComboBox();
      facenameCombo.addItem("Serif");
      facenameCombo.addItem("SansSerif");
      facenameCombo.addItem("Monospaced");
      facenameCombo.setEditable(true);
      facenameCombo.addActionListener(listener);

      italicCheckBox = new JCheckBox("Italic");
      italicCheckBox.addActionListener(listener);

      boldCheckBox = new JCheckBox("Bold");
      boldCheckBox.addActionListener(listener);

      smallButton = new JRadioButton("Small");
      smallButton.setSelected(true);
      smallButton.addActionListener(listener);

      mediumButton = new JRadioButton("Medium");
      mediumButton.addActionListener(listener);

      largeButton = new JRadioButton("Large");
      largeButton.addActionListener(listener);

      // add radio buttons to button group

      ButtonGroup sizeGroup = new ButtonGroup();
      sizeGroup.add(smallButton);
      sizeGroup.add(mediumButton);
      sizeGroup.add(largeButton);

      // add components to panels
      
      JPanel facenamePanel = new JPanel();
      facenamePanel.add(facenameCombo);
      
      JPanel sizeGroupPanel = new JPanel();
      sizeGroupPanel.add(smallButton);
      sizeGroupPanel.add(mediumButton);
      sizeGroupPanel.add(largeButton);
      sizeGroupPanel.setBorder
         (new TitledBorder(new EtchedBorder(), "Size"));

      JPanel styleGroupPanel = new JPanel();
      styleGroupPanel.add(italicCheckBox);
      styleGroupPanel.add(boldCheckBox);
      styleGroupPanel.setBorder
         (new TitledBorder(new EtchedBorder(), "Style"));

      // line up component panels

      JPanel southPanel = new JPanel();
      southPanel.setLayout(new GridLayout(3, 1));
      southPanel.add(facenamePanel);
      southPanel.add(sizeGroupPanel);
      southPanel.add(styleGroupPanel);

      // add panels to content pane

      Container contentPane = getContentPane();
      contentPane.add(sampleField, "Center");
      contentPane.add(southPanel, "South");

      setSampleFont();
   }

   /**
      Gets user choice for font name, style, and size
      and sets the font of the text field.
   */
   public void setSampleFont()
   {  // get font name
   
      String facename 
         = (String)facenameCombo.getSelectedItem();
      
      // get font style
      
      int style = 0;
      if (italicCheckBox.isSelected()) 
         style = style + Font.ITALIC;
      if (boldCheckBox.isSelected()) 
         style = style + Font.BOLD;
         
      // get font size   

      int size = 0;
      
      final int SMALL_SIZE = 12;
      final int MEDIUM_SIZE = 16;
      final int LARGE_SIZE = 24;

      if (smallButton.isSelected()) 
         size = SMALL_SIZE;
      else if (mediumButton.isSelected()) 
         size = MEDIUM_SIZE;
      else if (largeButton.isSelected()) 
         size = LARGE_SIZE;
         
      // set font of text field
      
      sampleField.setFont(new Font(facename, style, size));      
      sampleField.repaint();
   }
   
   private JTextField sampleField;
   private JCheckBox italicCheckBox;
   private JCheckBox boldCheckBox;
   private JRadioButton smallButton;
   private JRadioButton mediumButton;
   private JRadioButton largeButton;
   private JComboBox facenameCombo;
   
   private class ChoiceListener implements ActionListener
   {  public void actionPerformed(ActionEvent event)
      {  setSampleFont();
      }
   }   

   private class WindowCloser extends WindowAdapter
   {  public void windowClosing(WindowEvent event)
      {  System.exit(0);
      }
   }
}