/********************************************************************/
/* Prof. Dr. Carsten Vogt                                           */
/* FH Koeln, Fak. 07 / Nachrichtentechnik                           */
/* http://www.nt.fh-koeln.de/vogt                                   */
/*                                                                  */
/* Das Programm zeigt den Umgang mit Fenster- und Maus-Ereignissen. */
/********************************************************************/

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


class EventTestFrame extends JFrame {

  JTextField textMouse,        // zur Ausgabe der Ereignisse des MouseListeners
             textMouseMotion,  // zur Ausgabe der Ereignisse des MouseMotionListeners
             textWindow;       // zur Ausgabe der Ereignisse des WindowListeners

  JFrame referenzFrame;  // Frame, bezueglich dessen die Ereignisse abgefragt werden

  EventTestFrame(String s) {

   // Erzeugen des Rahmens des Hauptfensters:

   super(s);
   Container c = getContentPane();
   c.setLayout(new FlowLayout());
   c.setForeground(Color.black);

   // Hinzufuegen der Textfelder zur Ausgabe der erkannten Ereignisse:

   textMouse = new JTextField(25);
   textMouse.setFont(new Font("Arial",Font.BOLD,20));
   textMouse.setForeground(Color.blue);
   c.add(textMouse);

   textMouseMotion = new JTextField(25);
   textMouseMotion.setFont(new Font("Arial",Font.BOLD,20));
   textMouseMotion.setForeground(Color.blue);
   c.add(textMouseMotion);

   textWindow = new JTextField(25);
   textWindow.setFont(new Font("Arial",Font.BOLD,20));
   textWindow.setForeground(Color.blue);
   c.add(textWindow);

   // Komponenten anordnen und sichtbar machen:

   setLocation(100,200);
   setSize(500,150);
   setVisible(true);

   // Erzeugen des Frames, dessen Ereignisse abgefragt werden:

   referenzFrame = new JFrame();
   referenzFrame.setLocation(100,360);
   referenzFrame.setSize(200,200);
   referenzFrame.setVisible(true);

   referenzFrame.addMouseListener(new MeinMouseListener());  
   referenzFrame.addMouseMotionListener(new MeinMouseMotionListener());  
   referenzFrame.addWindowListener(new MeinWindowListener());  

  }

 // Listener für Maus-Ereignisse

 class MeinMouseListener implements MouseListener {

  public void mouseClicked(MouseEvent e) {
   System.out.println("Maustaste geclickt"); 
   textMouse.setText("Maustaste geclickt"); 
  }

  public void mousePressed(MouseEvent e) {
   System.out.println("Maustaste gedrueckt und festgehalten"); 
   textMouse.setText("Maustaste gedrueckt und festgehalten"); 
  }

  public void mouseReleased(MouseEvent e) {
   System.out.println("Maustaste losgelassen"); 
   textMouse.setText("Maustaste losgelassen"); 
  }

  public void mouseEntered(MouseEvent e) {
   System.out.println("Mause im Fenster"); 
   textMouse.setText("Maus im Fenster"); 
  }

  public void mouseExited(MouseEvent e) {
   System.out.println("Maus ausserhalb des Fensters"); 
   textMouse.setText("Maus ausserhalb des Fensters"); 
  }

 }

 // Listener für weitere Maus-Ereignisse

 class MeinMouseMotionListener implements MouseMotionListener {

  public void mouseMoved(MouseEvent e) {
   System.out.println("Maus bewegt"); 
   textMouseMotion.setText("Maus bewegt"); 
  }

  public void mouseDragged(MouseEvent e) {
   System.out.println("Maus mit gedrueckter Taste bewegt"); 
   textMouseMotion.setText("Maus mit gedrueckter Taste bewegt"); 
  }

 }

 // Listener für Fenster-Ereignisse

 class MeinWindowListener implements WindowListener {

  public void windowOpened(WindowEvent e) {
   System.out.println("Fenster geoeffnet"); 
   textWindow.setText("Fenster geoeffnet"); 
  }

  public void windowActivated(WindowEvent e) {
   System.out.println("Fenster aktiviert"); 
   textWindow.setText("Fenster aktiviert"); 
  }

  public void windowDeactivated(WindowEvent e) {
   System.out.println("Fenster deaktiviert"); 
   textWindow.setText("Fenster deaktiviert"); 
  }

  public void windowIconified(WindowEvent e) {
   System.out.println("Fenster in Icon transformiert"); 
   textWindow.setText("Fenster in Icon transformiert"); 
  }

  public void windowDeiconified(WindowEvent e) {
   System.out.println("Icon in Fenster transformiert"); 
   textWindow.setText("Icon in Fenster transformiert"); 
  }

  public void windowClosing(WindowEvent e) {
   System.out.println("Fenster schliesst sich"); 
   textWindow.setText("Fenster schliesst sich"); 
  }

  public void windowClosed(WindowEvent e) {
   System.out.println("Fenster geschlossen"); 
   textWindow.setText("Fenster geschlossen"); 
  }

 }

}

// Hauptprogramm: erzeugt den Frame

public class FensterUndMausEvents {

  public static void main(String args[]) {

    new EventTestFrame("Event-Tests");  

  }

}

