Tit   Inh   Ind   1   2   3   4   5   6   7   8   9   10   11   12   13   14   15   16   17   18   19   20   21   22   23   24   25   26   27   28   29   30   31   32   <<   <   >   >> 

19.2 Component-Events



Ein Component-Event wird generiert, wenn eine Komponente verschoben oder ihre Größe verändert wurde oder wenn sich der Anzeigezustand einer Komponente verändert hat. Da sowohl Fenster als auch alle Dialogelemente aus der Klasse Component abgeleitet sind, haben die hier erwähnten Ereignisse für nahezu alle GUI-Elemente des AWT Gültigkeit.

Ein Empfänger für Component-Events muß das Interface ComponentListener implementieren und bekommt Events des Typs ComponentEvent übergeben. ComponentEvent erweitert die Klasse AWTEvent und stellt neben getID und getSource die Methode getComponent zur Verfügung, mit der die Komponente ermittelt werden kann, die die Nachricht ausgelöst hat.

public Component getComponent()
java.awt.event.ComponentEvent

Die Registrierung der Empfängerklasse erfolgt mit der Methode addComponentListener, die in allen aus Component abgeleiteten Klassen zur Verfügung steht:

public void addComponentListener(ComponentListener l)
java.awt.Component

Tabelle 19.2 gibt eine Übersicht der Methoden von ComponentListener und erklärt ihre Bedeutung:

Ereignismethode Bedeutung
componentShown Eine Komponente wurde sichtbar.
componentHidden Eine Komponente wurde unsichtbar.
componentMoved Eine Komponente wurde verschoben.
componentResized Die Größe einer Komponente hat sich geändert.

Tabelle 19.2: Methoden von ComponentListener

Das folgende Programm demonstriert die Anwendung der Methoden componentMoved und componentResized am Beispiel eines Fensters BirdsEyeFrame, das schematisch sich selbst und seine Lage auf dem Desktop aus der Vogelperspektive darstellt. Wird das Fenster verschoben oder seine Größe geändert, so paßt es seine eigene Darstellung proportional an und zeichnet die Client-Area neu. Die Implementierung der paint-methode ermittelt dazu die Seitenverhältnisse von Fenster und Desktop und verwendet diese als Quotient zur Anzeige des Fensters im Fenster.

Um auf die Component-Events zu reagieren, registriert BirdsEyeFrame die Adapterklasse ComponentRepaintAdapter, die die Methoden componentMoved und componentResized implementiert. Sie werden immer dann aufgerufen, wenn das Fenster verschoben oder in der Größe geändert wurde und rufen repaint auf, um das Fenster neu zu zeichnen. Auf diese Weise werden alle Änderungen des Frames sofort in seiner eigenen Client-Area gespiegelt:

001 /* Listing1902.java */
002 
003 import java.awt.*;
004 import java.awt.event.*;
005 
006 class WindowClosingAdapter1902
007 extends WindowAdapter
008 {
009    public void windowClosing(WindowEvent event)
010    {
011       event.getWindow().setVisible(false);
012       event.getWindow().dispose();
013       System.exit(0);
014    }
015 }
016 
017 class ComponentRepaintAdapter
018 extends ComponentAdapter
019 {
020    public void componentMoved(ComponentEvent event)
021    {
022       event.getComponent().repaint();
023    }
024 
025    public void componentResized(ComponentEvent event)
026    {
027       event.getComponent().repaint();
028    }
029 }
030 
031 class BirdsEyeFrame
032 extends Frame
033 {
034    public BirdsEyeFrame()
035    {
036       super("BirdsEyeFrame");
037       addWindowListener(new WindowClosingAdapter1902());
038       addComponentListener(new ComponentRepaintAdapter());
039       setBackground(Color.lightGray);
040    }
041 
042    public void paint(Graphics g)
043    {
044       Dimension screensize = getToolkit().getScreenSize();
045       Dimension framesize  = getSize();
046       double qx = framesize.width  / (double)screensize.width;
047       double qy = framesize.height / (double)screensize.height;
048       g.setColor(Color.white);
049       g.fillRect(
050          (int)(qx * getLocation().x),
051          (int)(qy * getLocation().y),
052          (int)(qx * framesize.width),
053          (int)(qy * framesize.height)
054       );
055       g.setColor(Color.darkGray);
056       g.fillRect(
057          (int)(qx * getLocation().x),
058          (int)(qy * getLocation().y),
059          (int)(qx * framesize.width),
060          (int)(qy * getInsets().top)
061       );
062       g.drawRect(
063          (int)(qx * getLocation().x),
064          (int)(qy * getLocation().y),
065          (int)(qx * framesize.width),
066          (int)(qy * framesize.height)
067       );
068    }
069 
070 }
071 
072 public class Listing1902
073 {
074    public static void main(String[] args)
075    {
076       BirdsEyeFrame wnd = new BirdsEyeFrame();
077       wnd.setSize(300,200);
078       wnd.setLocation(200,100);
079       wnd.setVisible(true);
080    }
081 }
Listing1902.java
Listing 19.2: Das eigene Fenster aus der Vogelperspektive

 Beispiel 

Die Ausgabe des Programms ist:

Abbildung 19.1: Das Fenster sieht sich selbst aus der Vogelperspektive


 Tit   Inh   Ind   1   2   3   4   5   6   7   8   9   10   11   12   13   14   15   16   17   18   19   20   21   22   23   24   25   26   27   28   29   30   31   32   <<   <   >   >> 
Go To Java 2, Addison Wesley, Version 1.0.2, © 1999 Guido Krüger, http://www.gkrueger.com