/****************************************************************/
/* Prof. Dr. Carsten Vogt                                       */
/* FH Koeln, Fak. 07 / Nachrichtentechnik                       */
/* http://www.nt.fh-koeln.de/vogt                               */
/*                                                              */
/* Das Programm zeigt, als einfuehrende Demo in das Kapitel     */
/* zur Oberflaechenprogrammierung, einen Frame mit einem Label, */
/* einem Textfeld und zwei Buttons.                             */
/****************************************************************/

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class OflDemo {

 public static void main(String args[]) {

   //// Deklarationen fuer Komponenten der Oberflaeche:

   JFrame frame;              // Rahmen der Oberflaeche
   JLabel label;              // fester Text
   JButton button1, button2;  // Buttons
   JTextField textfeld;       // Feld zur Textausgabe

   // Listener fuer die Buttons:
   // Definiert Aktion, die beim Druecken der Buttons ausgefuehrt werden soll

   class ButtonListener implements ActionListener {

    JTextField tf;  // Textfeld, in das der ButtonListener eine Ausgabe schreiben soll

    // Konstruktor zur Initialisierung des Attributs tf

    ButtonListener(JTextField tf) {
     this.tf = tf;
    }

    // Operation, die beim Druecken des Buttons ausgefuehrt werden soll:
 
    public void actionPerformed(ActionEvent e) {
 
     // Ermittlung der Beschriftung des gedrueckten Buttons:

     String ButtonText = new String(((JButton)e.getSource()).getText());

     // je nach Beschriftung Setzen oder Loeschen des Textfelds:
 
     if (ButtonText.equals("Textfeld setzen"))
      tf.setText("HELLO WORLD");
     if (ButtonText.equals("Textfeld loeschen"))
      tf.setText("");

    }

   }

   //// Anweisungen zur Erzeugung der Oberflaeche:

   // Frame erzeugen:

   frame = new JFrame("Ein erster Frame");

   // Frame-Layout setzen:

   frame.getContentPane().setLayout(new GridLayout(5,1));

   // Label mit Beschriftung und Zeichentyp erzeugen ...

   label = new JLabel("Ein Textfeld:");
   label.setFont(new Font("Arial",Font.BOLD,24));
   label.setForeground(Color.black);

   // ... und zum Frame hinzufuegen:

   frame.getContentPane().add(label);

   // Textfeld mit Zeichentyp und -farbe erzeugen ...

   textfeld = new JTextField();
   textfeld.setFont(new Font("Arial",Font.BOLD,24));
   textfeld.setForeground(Color.red);
 
   // ... und zum Frame hinzufuegen:

   frame.getContentPane().add(textfeld);

   // Zwei beschriftete Buttons erzeugen ...

   button1 = new JButton("Textfeld setzen");
   button1.setFont(new Font("Arial",Font.BOLD,24));
   button1.setForeground(Color.black);
   button2 = new JButton("Textfeld loeschen");
   button2.setFont(new Font("Arial",Font.BOLD,24));
   button2.setForeground(Color.black);


   // ... Listener registrieren, der bei Druecken
   // des Buttons ausgefuehrt werden soll ...

   button1.addActionListener(new ButtonListener(textfeld));
   button2.addActionListener(new ButtonListener(textfeld));

   // ... und zum Frame hinzufuegen:

   frame.getContentPane().add(Box.createVerticalStrut(10));
   frame.getContentPane().add(button1);
   frame.getContentPane().add(button2);
   
   // Frame sichtbar machen:

   frame.pack();
   frame.setVisible(true);

   // Position und Groeße des Frames setzen:

   frame.setLocation(100,100);
   frame.setSize(250,240);
  
  }

}

