package chapter11;

/**
 * Title:        Chapter 11, "Creating User Interfaces"
 * Description:  Examples for Chapter 11
 * Copyright:    Copyright (c) 2000
 * Company:      Armstrong Atlantic State University
 * @author Y. Daniel Liang
 * @version 1.0
 */

// CheckBoxDemo.java: Use check boxes to select one or more choices
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.*;
import chapter10.MessagePanel;
import javax.swing.*;

public class CheckBoxDemo extends JFrame implements ItemListener
{
  // Declare check boxes
  private JCheckBox jchkCentered, jchkBold, jchkItalic;

  // Declare a panel for displaying message
  private MessagePanel messagePanel;

  /**Main method*/
  public static void main(String[] args)
  {
    CheckBoxDemo frame = new CheckBoxDemo();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setVisible(true);
  }

  /**Default constructor*/
  public CheckBoxDemo()
  {
    setTitle("Check Box Demo");

    // Create the message panel
    messagePanel = new MessagePanel();
    messagePanel.setMessage("Welcome to Java!");
    messagePanel.setBackground(Color.yellow);

    // Put three check boxes in panel p
    JPanel p = new JPanel();
    p.setLayout(new FlowLayout());
    p.add(jchkCentered = new JCheckBox("Centered"));
    p.add(jchkBold = new JCheckBox("Bold"));
    p.add(jchkItalic = new JCheckBox("Italic"));

    // Set keyboard mnemonics
    jchkCentered.setMnemonic('C');
    jchkBold.setMnemonic('B');
    jchkItalic.setMnemonic('I');

    // Place messagePanel and p in the frame
    getContentPane().setLayout(new BorderLayout());
    getContentPane().add(messagePanel, BorderLayout.CENTER);
    getContentPane().add(p, BorderLayout.SOUTH);

    // Register listeners on jchkCentered, jchkBold, and jchkItalic
    jchkCentered.addItemListener(this);
    jchkBold.addItemListener(this);
    jchkItalic.addItemListener(this);
  }

  /**Handle check box selection*/
  public void itemStateChanged(ItemEvent e)
  {
    if (e.getSource() instanceof JCheckBox)
    {
      // Determine a font style
      int selectedStyle = 0;
      if (jchkBold.isSelected())
        selectedStyle = selectedStyle+Font.BOLD;
      if (jchkItalic.isSelected())
        selectedStyle = selectedStyle+Font.ITALIC;

      // Set font for the message
      messagePanel.setFont(new Font("Serif", selectedStyle, 20));
      if (jchkCentered.isSelected())
        messagePanel.setCentered(true);
      else
        messagePanel.setCentered(false);

      // Make sure the message is repainted
      messagePanel.repaint();
    }
  }
}