Ereignissteuerung durch Standardklassen Ergänzende Kapitel Hypertext-Version Lauscher © APSIS GmbH

6.5.1. Standardklassen für Anwenderkommunikation

Das Paket java.awt exportiert einen Satz von Klassen, mit deren Hilfe eine grafische Anwenderobefläche gebaut werden kann. Sein intensives Studium gehört zum Erlernen der Sprache Java. In diesem Lehrbuch untersuchen wir nur einige Grundprinzipien, die im Paket verwendet werden.

Zuerst betrachten wir einige Klassen, mit deren Hilfe die grafischen Elemente gezeichnet werden können. Im nächsten Kapitel lernen wir, wie die Anwendereingaben ausgewertet werden.

Die Strategie beim Zeichnen in einem Fenster ist folgende:

  1. Ein grafisches Objekt wird mit Hilfe eines Konstruktors erzeugt
  2. Es wird dem Fensterobjekt hinzugefügt. Hierzu steht typischerweise eine Methode add des Fensterobjekts zur Verfügung.

Die Klasse java.awt.Button ist zum Beispiel geeignet, einen Knopf in ein Fenster zu plazieren. Dieser kann vom Anwender mit der Maus gedrückt werden:

public class EinKnopf extends java.applet.Applet { // EinKnopf.java
	public void init() {
		java.awt.Button knopf = new java.awt.Button("OK"); // parametrisierter Konstruktor: Text erscheint auf dem Knopf
		super.add(knopf); // Applet ist eine Unterklasse von Window, von wo add geerbt wurde
	}
}

Eine Leinwand ist eine grafische Komponente, die einen Bereich im Fenster repräsentiert. Hier kann man andere (grafische) Komponenten plazieren, wie z.B. Rechtecke, Kreise oder Textzeilen. Hierzu muß in der Unterklasse von java.awt.Canvas die paint-Methode überschrieben werden:

class Leinwand extends java.awt.Canvas { // LeinwandDemo.java
	public Leinwand () {
		resize(100,100);
	}
	public void paint(java.awt.Graphics grafik) {
		grafik.drawRect(0,0,99,99); // Umrahmung zeichnen
		grafik.drawString("Eine Leinwand", 20,20);
	}
}
public class LeinwandDemo extends java.applet.Applet {
	public void init() {
		Leinwand leinwand = new Leinwand();
		add(leinwand);
	}
}

In diesem Beispiel haben wir die Klasse Leinwand nicht als public class vereinbart. Aus diesem Grund können wir sie zusammen mit der Klasse LeinwandTest in einer Datei namens LeinwandDemo.java speichern.

Ein Haken (auf Englisch: checkbox) ist ein kleiner Knopf, in den mit Hilfe der Maus ein kleines Kreuz gesetzt werden kann:

public class Haken extends java.applet.Applet { // Haken.java
	public void init() {
		java.awt.Checkbox haken = new java.awt.Checkbox("Bitte ankreuzen");
		add(haken);
	}
}

Hier haben wir den parametrisierten Konstruktor der Klasse Checkbox aufgerufen. Ihr alternativer Konstruktor mit zwei Parametern erlaubt, daß der Haken zu Anfang gesetzt ist. Hierzu muß ihm als zweiter Parameter der logischer Wert true angegeben werden:

Checkbox haken = new Checkbox("Bitte ankreuzen", true);

Eine Hakengruppe (auch Radioknopf genannt, auf Englisch radio button) erlaubt eine Möglichkeiten aus mehreren auszuwählen:

import java.awt.*; // Checkbox, CheckboxGroup
public class HakenGruppe extends java.applet.Applet { // HakenGruppe.java
	public void init() {
		CheckboxGroup hakenGruppe = new CheckboxGroup();
		Checkbox haken1 = new Checkbox("Erste Wahl", hakengruppe, true);
		Checkbox haken2 = new Checkbox("Zweite Wahl", hakengruppe, false);
		add(haken1);
		add(haken2);
	}
}

Wenn also als zweiter Parameter im Konstruktor der Checkbox-Klasse ein CheckboxGroup-Objekt angegeben ist, wird der Haken einer Hakengruppe zugeordnet. Der dritte Parameter bestimmt, ob der Haken gesetzt ist und welcher nicht.

Unserer Auswahlliste (Auswahl auf Englisch: choice) entspricht die Standardklasse java.awt.Choice:

public class AuswahlListe extends java.applet.Applet { // AuswahlListe.java
	public void init() {
		java.awt.Choice auswahl = new java.awt.Choice();
		auswahl.addItem("Rot");
		auswahl.addItem("Gruen");
		auswahl.addItem("Blau");
		add(auswahl);
	}
}

Mit Hilfe einer Etikette (auf Englisch: label) kann eine Textzeile in einem Fenster dargestellt werden:

import java.awt.Label;
public class Etikette extends java.applet.Applet { // Etikette.java
	public void init() {
		add(new Label("Eine Etikette"));
		add(new Label("Zweite Etikette", Label.RIGHT)); // nach rechts ausrichten
	}
}

In diesem Beispiel haben wir keine Referenz für das erzeugte Label-Objekt angelegt, sondern das Ergebnis des new-Operators (ähnlich wie einer Funktion) unmittelbar als Parameter der Methode add (aus der Klasse java.applet.Applet) übergeben. Dies ist dann sinnvoll, wenn dieses Objekt nie wieder über eine Referenz angesprochen werden soll. Hierdurch wird der Programmtext allerdings etwas schlechter lesbar.

Der zweite Parameter der Methode add bewirkt, daß die Textzeile in der zweiten Etikette rechts ausgerichtet wird. Hierzu wird die Wertereferenz RIGHT der Klasse Label als Parameter eingesetzt.

In einem Textfeld kann der Anwender seine eigene Textzeile eintippen:

import java.awt.TextField;
public class Textfeld extends java.applet.Applet { // Textfeld.java
	public void init() {
		add(new TextField("Bitte Textzeile eingeben"));
	}
}

Ein Textbereich besteht – im Gegensatz zum Textfeld – aus mehreren Zeilen:

import java.awt.TextArea;
public class Textbereich extends java.applet.Applet { // Textbereich.java
	private TextArea textbereich;
	public void init() {
		textbereich = new TextArea("Bitte Text eingeben", 10, 30); // Größe des Bereichs
		add(textbereich);
	}
}

In diesem Beispiel ist das Textbereich-Objekt nicht lokal in der init-Methode, sondern global in der Klasse. Dies ist dann nötig, wenn es auch in anderen Methoden der Klasse Textbereich angesprochen werden soll.


Ereignissteuerung durch Standardklassen Ergänzende Kapitel Hypertext-Version Lauscher © APSIS GmbH