The Quotes2 Applet:


Code:

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

public class Quotes2 extends  Applet {

   String[] text = {"Hallo, wie geht´s?",
                    "Hi, how do you do?",
                    "Hey, hur mår du?"};

   Label quote = new Label (text[0], Label.CENTER);

   final public static int UPPERCASE  = 1;
   final public static int LOWERCASE  = 2;
   final public static int FONT       = 3;
   final public static int DEUTSCH    = 4;
   final public static int ENGLISH    = 5;
   final public static int SVENSKA    = 6;
   final public static int BOLD       = 7;
   final public static int ITALIC     = 8;

   Quote2_GUI gui = new Quote2_GUI (this);

   //===========================================================
   //  Initializes the applet with default settings.
   //===========================================================
   public void init() {
      quote.setFont (new Font ("Arial", Font.PLAIN, 14));
      gui.init (quote);
   }  // method init

   //===========================================================
   //  Sets the quote text to upper case.
   //===========================================================
   public void set_uppercase() {
      quote.setText (quote.getText().toUpperCase());
   }  // method set_uppercase

   //===========================================================
   //  Sets the quote text to lower case.
   //===========================================================
   public void set_lowercase() {
      quote.setText (quote.getText().toLowerCase());
   }  // method set_lowercase
   
   //===========================================================
   //  Changes the quote text to a deutsch statement.
   //===========================================================
   public void set_deutsch() {
      quote.setText (text[0]);
   }  // method set_deutsch

   //===========================================================
   //  Changes the quote text to a english statement.
   //===========================================================
   public void set_english() {
      quote.setText (text[1]);
   }  // method set_english

   //===========================================================
   //  Changes the quote text to a svenska statement.
   //===========================================================
   public void set_svenska()
   {
      quote.setText (text[2]);
   }

   //===========================================================
   //  Changes the font of the quote text.
   //===========================================================
   public void set_font (String font)
   {
      quote.setFont (new Font (font, quote.getFont().getStyle(), 14));
   } 

   //===========================================================
   //  Toggles the italics setting of the quote text.
   //===========================================================
   public void set_italics (boolean on)
   {
      Font font = quote.getFont();
      int style = font.getStyle();

      // Turn italic on or off
      if (on) {
         if (! font.isItalic())
            style += Font.ITALIC;
      } else {
         if (font.isItalic())
            style -= Font.ITALIC;
      }
      quote.setFont (new Font (font.getName(), style, 14));
   }

   //===========================================================
   //  Toggles the bold setting of the quote text.
   //===========================================================
   public void set_bold (boolean on)
   {
      Font font = quote.getFont();
      int style = font.getStyle();

      // Turn bold on or off
      if (on) {
         if (! font.isBold())
            style += Font.BOLD;
      } else {
         if (font.isBold())
            style -= Font.BOLD;
      }
      quote.setFont (new Font (font.getName(), style, 14));
   } 
}


class Quote2_GUI
{
   private Quotes2 applet;

   private Panel case_and_fonts = new Panel();
   private Panel language = new Panel();
   private Panel style = new Panel();

   // To be placed in `case_and_fonts´
   private Button uppercase = new Button ("Uppercase");
   private Button lowercase = new Button ("Lowercase");
   private Choice font_choice = new Choice();
   
   // To be placed in `language´
   private CheckboxGroup topic = new CheckboxGroup();
   private Checkbox deutsch = new Checkbox ("Deutsch", topic, true);
   private Checkbox english = new Checkbox ("English", topic, false);
   private Checkbox svenska = new Checkbox ("Svenska", topic, false);

   // To be placed in `style´
   private Checkbox bold = new Checkbox ("Bold");
   private Checkbox italic = new Checkbox ("Italic");

   private Quote2_Action_Listener uppercase_listener;
   private Quote2_Action_Listener lowercase_listener;

   private Quote2_Item_Listener bold_listener;
   private Quote2_Item_Listener italic_listener;
   private Quote2_Item_Listener font_listener;
   private Quote2_Item_Listener deutsch_listener;
   private Quote2_Item_Listener english_listener;
   private Quote2_Item_Listener svenska_listener;

   //===========================================================
   //  Sets up the GUI by creating the necessary listeners.
   //===========================================================
   public Quote2_GUI (Quotes2 quote_applet)
   {
      applet = quote_applet;

      uppercase_listener = 
         new Quote2_Action_Listener (applet, Quotes2.UPPERCASE);
      lowercase_listener = 
         new Quote2_Action_Listener (applet, Quotes2.LOWERCASE);

      bold_listener = 
         new Quote2_Item_Listener (applet, Quotes2.BOLD);
      italic_listener = 
         new Quote2_Item_Listener (applet, Quotes2.ITALIC);

      font_listener = 
         new Quote2_Item_Listener (applet, Quotes2.FONT);

      deutsch_listener = 
         new Quote2_Item_Listener (applet, Quotes2.DEUTSCH);
      english_listener = 
         new Quote2_Item_Listener (applet, Quotes2.ENGLISH);
      svenska_listener = 
         new Quote2_Item_Listener (applet, Quotes2.SVENSKA);
   }

   //===========================================================
   //  Initializes the GUI by laying out the components and
   //  adding the appropriate listeners.
   //===========================================================
   public void init (Label quote)
   {
      // setup the component hierarchy
      // prepare choice button for case_and_fonts panel
      String[] font_list = Toolkit.getDefaultToolkit().getFontList();
      
      // add available fonts to choice button
      // => dynamic number of alternatives
      for (int i = 0; i < font_list.length; i++)
         font_choice.addItem (font_list[i]);
         
      // font_choice.addItem ("Arial");
      // font_choice.addItem ("Courier");
      // font_choice.addItem ("TimesRoman");
      // font_choice.addItem ("ZapfDingbats");

      // set up case_and_fonts panel
      case_and_fonts.setLayout (new GridLayout (4,1,3,3));
      case_and_fonts.add (uppercase);
      case_and_fonts.add (lowercase);
      case_and_fonts.add (font_choice);
      case_and_fonts.setBackground (Color.red);
      
      // set up language panel
      language.setLayout (new GridLayout (4,1));
      language.add (deutsch);
      language.add (english);
      language.add (svenska);
      language.setBackground (Color.yellow);

      // set up style panel
      style.setLayout (new GridLayout (4,1));
      style.add (bold);
      style.add (italic);
      style.setBackground (Color.cyan);
 
      // set up applet gui
      applet.setLayout (new BorderLayout(10,2));
      quote.setBackground (Color.green);
      applet.add ("North", quote);
      applet.add ("West", case_and_fonts);
      applet.add ("Center", language);
      applet.add ("East", style);

      applet.resize (300,150);

      // Add all associated listeners
      uppercase.addActionListener (uppercase_listener);
      lowercase.addActionListener (lowercase_listener);

      font_choice.addItemListener (font_listener);
      deutsch.addItemListener (deutsch_listener);
      english.addItemListener (english_listener);
      svenska.addItemListener (svenska_listener);
      bold.addItemListener (bold_listener);
      italic.addItemListener (italic_listener);
   }
}  


class Quote2_Item_Listener implements ItemListener
{
   private Quotes2 applet;
   private int command;

   //===========================================================
   //  Sets up the listener by storing the applet and the
   //  command, as specified.
   //===========================================================
   public Quote2_Item_Listener
      (Quotes2 listening_applet, int listening_command)
   {
      applet = listening_applet;
      command = listening_command;
   }

   //===========================================================
   //  Responds to an item state change event by modifying
   //  the appropriate feature.
   //===========================================================
   public void itemStateChanged (ItemEvent event)
   {
      switch (command) {

         case Quotes2.FONT:
            applet.set_font ((String)(event.getItem()));
            break;

         case Quotes2.DEUTSCH:
            applet.set_deutsch();
            break;

         case Quotes2.ENGLISH:
            applet.set_english();
            break;

         case Quotes2.SVENSKA:
            applet.set_svenska();
            break;

         case Quotes2.BOLD:
            applet.set_bold
               (event.getStateChange() == ItemEvent.SELECTED);
            break;

         case Quotes2.ITALIC:
            applet.set_italics
               (event.getStateChange() == ItemEvent.SELECTED);
            break;

         default:
            System.out.println ("Illegal Item " + event.toString());
      }
   } 
}


class Quote2_Action_Listener implements ActionListener
{
   private Quotes2 applet;
   private int command;

   //===========================================================
   //  Sets up the listener by storing the applet and the
   //  command, as specified.
   //===========================================================
   public Quote2_Action_Listener
      (Quotes2 listening_applet, int listening_command)
   {
      applet = listening_applet;
      command = listening_command;
   }

   //===========================================================
   //  Responds to the action event by setting the appropriate
   //  case characteristic.
   //===========================================================
   public void actionPerformed (ActionEvent event)
   {
      switch (command) {

         case Quotes2.UPPERCASE:
            applet.set_uppercase();
            break;

         case Quotes2.LOWERCASE:
            applet.set_lowercase();
            break;

         default:
            System.out.println ("Illegal Action " + event.toString());
      }
   }
}