prev up inhalt next


2.6.2 AWT-Übersicht

In diesem Abschnitt wird eine kurze Übersicht der wesentlichen Konzepte der AWT-Klassen gegeben. Die für die Programmierung notwendigen Details sind bei Java generell der HTML-On-Line-Dokumentation zu entnehmen.

Das Basis-Paket für Grafik- und Oberflächenprogrammierung ist java.awt. Wie schon erwähnt, werden die dort zur Verfügung gestellten Klassen auf entsprechende Elemente eines schon vorhandenen Window-Systems abgebildet. Zu diesem Zweck gibt es das Paket java.awt.peer, das aber normalerweise vom Programmierer nicht direkt benutzt wird. Weitere verwandte Klassen sind z.Zt. (d.h. in der Java-Version 1.1.x) java.awt.image mit Klassen für die direkte Manipulation von Bildern, java.awt.event für das neue Eventhandling-Konzept, sowie java.awt.datatransfer mit Möglichkeiten zum Datenaustausch zwischen Applikationen. Erwähnt werden sollte hier auch java.applet, dessen einzige Klasse Applet verwendet wird, wenn man Java-Programme in einem HTML-Dokument benutzen will.

Die Klassen des AWT-Pakets lassen sich grob in drei Gruppen einteilen: Grafikklassen, in denen grafische Objekte wie Farben, Fonts, Bilder beschrieben werden; Komponenten, d.h. Klassen, die GUI-Komponenten wie z.B. Buttons, Menüs und Textfelder zur Verfügung stellen; sowie Layout-Manager, die die Anordnung von GUI-Komponenten in einer Applikation kontrollieren. Aus den verwandten Paketen sollen hier noch die Event-Listener besprochen werden, mit deren Hilfe die Interaktion zwischen User und Applikationen implementiert werden muß. Die folgende Übersicht erhebt keinen Anspruch auf Vollständigkeit, sondern beschreibt nur kurz die für Computergrafik-Programme wichtigen Klassen. Weitere Klassen sowie alle Details sind der entsprechenden On-Line-Dokumentation zu entnehmen.

Grafik

Die Grafik-Klassen implementieren jeweils einen bestimmten Aspekt und sind weitgehend unabhängig voneinander. Wichtige Klassen sind Color, Cursor, Font, FontMetrics, Image, MediaTracker, deren Bedeutung aus dem jeweiligen Namen ersichtlich ist. Wichtige Hilfsklassen sind Dimension, Point, Polygon, Rectangle, die jeweils entsprechende Objekte verwalten. Dabei ist zu beachten, daß alle diese Objekte keine Methoden haben, mit denen sie sich z.B. auf dem Schirm darstellen können. Diese Funktionalität wird durch die Klasse Graphcis bereitgestellt, in der Methoden vorhanden sind, um Bilder und andere grafische Objekte zu zeichnen, zu füllen, Farben oder Fonts zu ändern, Ausschnitte zu kopieren oder zu clippen usw. Diese abstrakte Klasse wird von diversen Komponenten bereitgestellt und kann dann verwendet werden, um das Aussehen dieser Komponente zu manipulieren.

GUI-Komponenten

Die Komponenten, mit deren Hilfe der Benutzer mit einer Oberfläche interagieren kann, sind im wesentlichen von zwei Klassen abgeleitet: MenuComponent, von der Klassen abgeleitet werden, mit denen Pulldown- und Popup-Menüs erzeugt werden können; und Component, von der alle anderen Komponenten abgeleitet werden. Diese kann man wiederum in zwei Gruppen einteilen. Zum einen gibt es Komponenten, die eine spezielle Funktionalität bereitstellen:

Außerdem gibt es Komponenten, die keine eigene Funktionalität bereitstellen, sondern die andere Komponenten aufnehmen und anordnen können. Die wichtigsten dieser Komponenten, die von der Klasse Container abgeleitet werden, sind:

Layout-Manager

Die wesentliche Aufgabe eines Containers ist die Darstellung der darin enthaltenen Komponenten. Zur Steuerung der Anordnung dieser Komponenten werden sogenannte Layout-Manager verwendet. Ein solcher Layout-Manager implementiert dazu eine spezielle Layout-Politik, die mehr oder weniger konfigurierbar ist. Es gibt die folgenden vordefinierten Layout-Manager:

Falls die Anforderungen einer speziellen Applikation mit diesen existierenden Layout-Managern nicht erfüllt werden können, besteht die Möglichkeit, weitere Manager zu implementieren. Dies ist im allgemeinen aber nicht der Fall, da mit dem GridBagLayout alle praktisch vorkommenden Anordnungen ermöglicht werden können.

Event-Handling

Eine offene Frage ist nun noch, wie das Aktivieren einer GUI-Komponente eine entsprechende Aktion im Benutzer-Programm auslöst. Dazu gibt es in AWT folgendes Konzept: Eine Aktion des Benutzers -- wie z.B. ein Mausklick -- erzeugt in der Java-Maschine einen Event. Je nach Art der Aktion und des Kontextes, in dem sie stattfindet, ergeben sich verschiedene Event-Typen, die wiederum verschiedene Argumente haben können. Eine Komponente kann für sie geeignete Events empfangen, indem ein sogenannter Event-Listener mit der Komponente verbunden wird. Für die verschiedenen Event-Typen gibt es verschiedene Listener, von denen einer oder mehrere bei einer Komponente eingetragen werden können. Ein Listener ist dabei ein Interface, in dem alle Methoden vorgegeben werden, die für eine Menge von zusammengehörigen Events notwendig sind. Die folgende Tabelle gibt eine Übersicht der verschiedenen Event-Listener:

Listener Methoden Komponenten
Action actionPerformed Button, List, MenuItem, TextField
Adjustment adjustmentValueChanged Scrollbar
Component componentHidden Component
  componentMoved  
  componentResized  
  componentShown  
Container componentAdded Container
  componentRemoved  
Focus focusGained Component
  focusLost  
Item itemStateChanged Checkbox, Choice, List
Key keyPressed Component
  keyReleased  
  keyTyped  
Mouse mouseClicked Component
  mouseEntered  
  mouseExited  
  mousePressed  
  mouseReleased  
MouseMotion mouseDragged Component
  mouseMoved  
Text textValueChanged TextComponent
Window windowActivated Window
  windowClosed  
  windowClosing  
  windowDeactivated  
  windowDeiconified  
  windowIconified  
  windowOpened  

prev up inhalt next