APPLETS II Vorbereitung

Martin Kellermann / Dave Gööck

 

Im Tutorium Applets 1 haben wir die grundlegenden Methoden der Applet-Programmierung kennen gelernt.

Da wir nicht unbedingt Fans der Sesamstrasse sind lassen wir den Miss Piggy Kram mal weg. Ganz nüchtern bestimmen wir nun, dass es in diesem jenem welchen Tutorium, in dem wir uns gerade befinden um das Hinzufügen einer gewissen Funktionalität zum bisher doch recht einfältig ausschauenden Applets geht.

 

Zuerst einmal brauchen wir grafische Komponenten, mit denen wir eine Interaktion zwischen Benutzer und Applet-Klasse realisieren können. Beispielsweise gibt es Buttons, RadioButtons, Checkboxen, Menüleisten, Popup-Menüs, TextFields, Labels ....

 

In unseren Beispielen werden wir die Swing-Komponenten, anstatt der in der Vorlesung eingeführten AWT-Komponenten verwenden. Die Swing Komponten haben den Vorteil, dass  mit ihnen ein einheitliches Look-And-Feel (Erscheinungsbild) unter verschiedenen Plattformen verwirklicht werden kann. Sie sind eine Weiterentwicklung der AWT-Klassen und haben sich inzwischen als Quasi-Standard etabliert.

 

Um die Swing-Komponenten nutzen zu können, muss zuerst folgendes package importiert werden:

 

import javax.swing.*;

 

Danach kann man innerhalb der eigenen Klasse wie üblich Instanzen von Swing-Objekten erzeugen.

 

JButton btn1 = new JButton("Knopf");    //Erzeugt einen Knopf mit der Aufschrift „Knopf“

JLabel lb1 = new JLabel();                            //Erzeugt eine Textanzeige ohne Aufschrift

 

Diese Objekte sollte man global instanzieren, damit sie in jeder Methode des Applets verwendet werden können.

 

Wenn man sich mal die Objekthirarchie ansieht, stellt man fest, dass ein Applet u.a. von einer Klasse Panel abgeleitet wird. Ein Panel ist ein Objekt, auf das andere Komponenten, wie Buttons, Labels, TextAreas und auch wieder Panels platziert werden können. Wenn man also möchte, dass seine Komponenten auch angezeigt werden, muss man sich die Mühe machen, sie auf dem Applet anzuordnen. Diese Anordnungen werden mit sog. Layout-Managern erstellt. Es gibt einige verschiedene Layout-Manager, die alle verschiedene Eigenschaften haben. Es variiert zwischen einfach und wenig funktional und schwierig und sehr funktional. Durch geschickte Programmierung ist es auch möglich die Layouts ineinander zu verschachteln.

Grundsätzlich wird der Layout-Manager durch

 

Panelname.setLayout(new LayoutmanagerName());

 

gesetzt.

dazu muss in den Importanweisungen das Package java.awt importiert werden:

 

import java.awt.* ;

 

Im Beispiel eines Applets kann das Layout wie folgt in der init-Methode gesetzt werden:

 

this.setLayout(new BorderLayout());

 

Andere mögliche Layouts sind z.B.:

FlowLayout        – dies ist das Standardlayout. D.h. wenn nichts anderes angegeben wird, werden alle Objekte hintereinander in einer Reihe angeordnet.

BorderLayout     – Unterteilt das Panel in 5 Gebiete: SOUTH, EAST, NORTH, WEST und CENTER.

GridLayout         – Unterteilt das Panel in einige gleich große Zellen, die in einem Raster angeordnet sind.

GridBagLayout   – Für Profis... recht kompliziert in der Konfiguration, lässt jedoch viel Spielraum.

CardLayout         – Ordnet alle Elemente übereinander an, so dass nur das oberste zu sehen ist.

 

Nun müssen also unsere Komponenten hinzugefügt werden. Beim BorderLayout in unserem Applet könnte das folgendermaßen aussehen (i.d.R. wird das auch in der init-Methode gemacht):

 

this.add(btn1, BorderLayout.SOUTH);

this.add(lb1, BorderLayout.CENTER);

 

Wenn man jetzt das Applet kompiliert und startet (z.b. im Browser über eine Website s. Tutorium Applets1 oder bei Forte eben wie üblich), wird man sehen, dass die Objekte bereits zu sehen sind. Wenn der Knopf jedoch betätigt wird, geschieht noch nichts. – Wie schade...

 

Nun wollen wir dem Knopf aber noch ein bisschen Leben einhauchen:

Um irgendwelche Aktionen zu registrieren (z.B. das Drücken eines Buttons oder das Bewegen der Maus über ein bestimmtes Objekt) werden sogenannte Listener benötigt. Für die Buttons z.B. ein ActionListener oder für die Maus ein MouseListener... Der Listener ist ein Interface und muss demnach noch implementiert werden. Wir können dies in unserem einfachen Beispiel direkt in der Applet-Klasse verwirklichen. Dazu müssen wir die Zeile der Klassendefinition:

 

public class AppletName extends Applet {

 

zu der folgenden erweitern

 

public class AppletName extends Applet implements ActionListener{

 

und in der Klasse die Methode

 

public void actionPerformed(ActionEvent event) {

}

 

einfügen.

Diese Methode wird immer dann aufgerufen, wenn eine, an den Listener gebundene Komponente, ein Event auslöst (z.B. ein Knopf gedrückt wird). Dazu müssen wir natürlich unsere Objekte in der init-Methode an den Listener binden, mittels der addActionListener-Methode.

 

btn1.addActionListener(this);

 

Zum Schluss muss nur noch angegeben werden, was der Button auslösen soll. In der actionPerformed-Methode muss dazu die auslösende Komponente identifiziert werden. Das macht man über einen if-clause:

 

if(event.getActionCommand().equals(btn1.getActionCommand())) lb1.setText(“Hallo”);

 

Einen zweiten Knopf könnte man nun im else-Zweig identifizieren.

 

Wenn wir jetzt das Applet starten, und den Button drücken, dann passiert....

....das wird doch nicht verraten!!!