import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

/** DemoMenu - simple JFC/Swing program to demonstrate menus.<p>
*
* Invocations:<p>
*
* <pre>
*     java DemoMenu
* </pre>
*
* <center><img src="DemoMenu-1.gif"></center><p>
*
* @see <a href="DemoMenu.java">source code</a>
* @author Scott MacKenzie, 2003
*/
public class DemoMenu
{
   public static void main(String[] args)
   {
      DemoMenuFrame frame = new DemoMenuFrame();
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setTitle("DemoMenu");
      frame.pack();
      frame.show();
   }
}

class DemoMenuFrame extends JFrame implements ActionListener
{
   private JLabel message;
   private JMenuItem small;
   private JMenuItem medium;
   private JMenuItem large;
   private JMenuItem serif;
   private JMenuItem sanserif;
   private JMenuItem monospaced;
   private JMenuItem plain;
   private JMenuItem italic;
   private JMenuItem bold;

   private String face;
   private int size;
   private int style;

   final int SMALL = 14;
   final int MEDIUM = 24;
   final int LARGE = 36;

   // constructor

   public DemoMenuFrame()
   {
      face = "Serif";
      size = 24;
      style = Font.PLAIN;

      // ----------------------------------
      // construct and configure components
      // ----------------------------------

      message = new JLabel();
      message.setFont(new Font(face, style, size));
      message.setText("Hello Java World ");
      message.setHorizontalAlignment(SwingConstants.CENTER);
      message.setPreferredSize(new Dimension(400, 200));

      // construct menus
      
      JMenuBar menuBar = new JMenuBar();
      this.setJMenuBar(menuBar);

      // Face menu

      JMenu faceMenu = new JMenu("Face");
      menuBar.add(faceMenu);
      serif = new JMenuItem("Serif");      
      sanserif = new JMenuItem("SansSerif");      
      monospaced = new JMenuItem("MonoSpaced");      
      faceMenu.add(serif);
      faceMenu.add(sanserif);
      faceMenu.add(monospaced);

      // Size menu

      JMenu sizeMenu = new JMenu("Size");
      menuBar.add(sizeMenu);
      small = new JMenuItem("Small");      
      medium = new JMenuItem("Medium");      
      large = new JMenuItem("Large");      
      sizeMenu.add(small);
      sizeMenu.add(medium);
      sizeMenu.add(large);

      // Style menu

      JMenu styleMenu = new JMenu("Style");
      menuBar.add(styleMenu);
      plain = new JMenuItem("Plain");      
      italic = new JMenuItem("Italic");      
      bold = new JMenuItem("Bold");      
      styleMenu.add(plain);
      styleMenu.add(italic);
      styleMenu.add(bold);

      // add liseners

      serif.addActionListener(this);
      sanserif.addActionListener(this);      
      monospaced.addActionListener(this);
      small.addActionListener(this);
      medium.addActionListener(this);      
      large.addActionListener(this);      
      plain.addActionListener(this);
      italic.addActionListener(this);      
      bold.addActionListener(this);      
      
      // add components to panel
      
      JPanel panel = new JPanel();
      panel.setLayout(new BorderLayout());
      panel.add(message, "Center");

      // make panel this JFrame's content pane

      this.setContentPane(panel);
   }
   
   // implement ActionListener method

   public void actionPerformed(ActionEvent ae)
   {
      // for in-class demo...
      //System.out.println(ae.paramString());

      Object source = ae.getSource();

      if (source == serif) face = "serif";
      else if (source == sanserif) face = "sansserif";
      else if (source == monospaced) face = "monospaced";
      else if (source == small) size = SMALL;
      else if (source == medium) size = MEDIUM;
      else if (source == large) size = LARGE;
      else if (source == plain) style = Font.PLAIN;
      else if (source == italic) style = Font.ITALIC;
      else if (source == bold) style = Font.BOLD;
      message.setFont(new Font(face, style, size));
   }
}

