From 33613a85afc4b1481367fbe92a17ee59c240250b Mon Sep 17 00:00:00 2001 From: Sven Eisenhauer Date: Fri, 10 Nov 2023 15:11:48 +0100 Subject: add new repo --- .../hjp5/html/k100249.html | 590 +++++++++++++++++++++ 1 file changed, 590 insertions(+) create mode 100644 Master/Reference Architectures and Patterns/hjp5/html/k100249.html (limited to 'Master/Reference Architectures and Patterns/hjp5/html/k100249.html') diff --git a/Master/Reference Architectures and Patterns/hjp5/html/k100249.html b/Master/Reference Architectures and Patterns/hjp5/html/k100249.html new file mode 100644 index 0000000..01cc8ae --- /dev/null +++ b/Master/Reference Architectures and Patterns/hjp5/html/k100249.html @@ -0,0 +1,590 @@ + + + +Handbuch der Java-Programmierung, 5. Auflage + + + + + + + + + +
 Titel  + Inhalt  + Suchen  + Index  + DOC  +Handbuch der Java-Programmierung, 5. Auflage +
 <<  +  <   +  >   + >>  + API  +Kapitel 39 - Applets I +
+
+ + + + +

39.1 Die Architektur eines Applets

+
+ +
+ + + + +

39.1.1 Grundlagen

+ +

+Für viele Leser, die Java lernen wollen, steht die Entwicklung +von Applets im Vordergrund und ist der Hauptgrund für die Beschäftigung +mit der Sprache. In letzter Zeit ist allerdings ein Trend zu beobachten, +bei dem Java zunehmend auch als Sprache für die Anwendungsentwicklung +an Bedeutung gewinnt. Daß man mit Java auch Web-Pages verschönern +kann, ist dabei ein angenehmer Nebeneffekt. + +

+Tatsächlich unterscheiden sich Applets und Applikationen gar +nicht so stark voneinander, wie man vermuten könnte. Bis auf +wenige Ausnahmen werden sie mit denselben Werkzeugen und Techniken +konstruiert. Vereinfacht kann man sagen, dass Java-Applikationen eigenständige +Programme sind, die zur Ausführung den Stand-Alone-Java-Interpreter +benötigen, während Java-Applets aus HTML-Seiten heraus aufgerufen +werden und zur Ausführung einen Web-Browser benötigen. + +

+Die wichtigsten Unterschiede kann man in einer kurzen Liste zusammenfassen: +

+ +

+Dieses Kapitel erklärt die Grundlagen der Applet-Programmierung +und erläutert die Einbindung von Applets in HTML-Dokumente. Es +baut dabei auf vielen der in den Kapiteln 23 +bis 34 des Buches +vermittelten AWT-Features auf, ohne deren Kenntnis die Applet-Programmierung +kaum möglich wäre. + + + + +

39.1.2 Die Klasse java.applet.Applet

+ +

+Wie schon erwähnt, wird das Hauptprogramm eines Applets aus der +Klasse Applet +des Pakets java.applet +abgeleitet. Applet +ist nun aber keine der abstrakten Basisklassen der Java-Klassenbibliothek, +wie man es vielleicht erwarten würde, sondern eine konkrete Grafikklasse +am Ende der Klassenhierarchie. Applet +ist aus der Klasse Panel +abgeleitet, diese aus Container +und Container +aus Component. +Abbildung 39.1 stellt die +Ableitungshierarchie schematisch dar: +

+ + +

+ +

+Abbildung 39.1: Ableitungsbaum der Applet-Klasse

+ +

+Ein Applet ist also ein rechteckiges Bildschirmelement, das eine Größe +und Position hat, Ereignisse empfangen kann und in der Lage ist, grafische +Ausgaben vorzunehmen. Tatsächlich kommt dies dem Anspruch eines +Applets, ein eigenständiges Programm zu sein, das innerhalb eines +fensterartigen Ausschnitts in einem grafikfähigen Web-Browser +läuft, sehr entgegen. Durch die Vererbungshierarchie erbt ein +Applet bereits von seinen Vaterklassen einen großen Teil der +Fähigkeiten, die es zur Ausführung benötigt. Die über +die Fähigkeiten von Container, +Component +und Panel +hinaus erforderliche Funktionalität, die benötigt wird, +um ein Objekt der Klasse Applet +als Hauptmodul eines eigenständigen Programms laufen zu lassen, +wird von der Klasse Applet +selbst zur Verfügung gestellt. + + + + +

39.1.3 Initialisierung und Endebehandlung

+ +

+Die Kommunikation zwischen einem Applet und seinem Browser läuft +auf verschiedenen Ebenen ab. Nach dem Laden wird das Applet zunächst +instanziert und dann initialisiert. Anschließend +wird es gestartet, erhält GUI-Events und wird irgendwann wieder +gestoppt. Schließlich wird das Applet vom Browser nicht mehr +benötigt und zerstört. + +

+Zu jedem dieser Schritte gibt es eine korrespondierende Methode, die +vor dem entsprechenden Statuswechsel aufgerufen wird. Die aus Applet +abgeleitete Klasse ist dafür verantwortlich, diese Methoden zu +überlagern und mit der erforderlichen Funktionalität auszustatten. + + + + +

Instanzierung des Applets

+ +

+Bevor ein Applet aktiv werden kann, muss der Browser zunächst +ein Objekt der abgeleiteten Applet-Klasse +instanzieren. Hierzu ruft er den parameterlosen Default-Konstruktor +der Klasse auf: +

+ + + + + +
+ +
+public Applet()
+
+
+
+java.applet.Applet
+ +

+Üblicherweise wird dieser in der abgeleiteten Klasse nicht überlagert, +sondern von Applet +geerbt. Notwendige Initialisierungen von Membervariablen werden später +erledigt. + + + + +

Initialisierung des Applets

+ +

+Nach der Instanzierung ruft der Browser die Methode init +auf, um dem Applet die Möglichkeit zu geben, Initialisierungen +vorzunehmen: +

+ + + + + +
+ +
+public void init()
+
+
+
+java.applet.Applet
+

+ + + + + + + + + +
+ +

+init +wird während der Lebensdauer eines Applets genau einmal +aufgerufen, nachdem die Klassendatei geladen und das Applet instanziert +wurde. Innerhalb von init +können Membervariablen initialisiert, Images oder Fonts geladen +oder Parameter ausgewertet werden.

+ + + + +
 Hinweis 
+
+ + + + +

Starten des Applets

+ +

+Nachdem die Initialisierung abgeschlossen ist, wird die Methode start +aufgerufen, um die Ausführung des Applets zu starten: +

+ + + + + +
+ +
+public void start()
+
+
+
+java.applet.Applet
+

+ + + + + + + + + +
+ +

+Im Gegensatz zur Initialisierung kann das Starten eines Applets mehrfach +erfolgen. Wenn der Browser eine andere Webseite lädt, wird das +Applet nicht komplett zerstört, sondern lediglich gestoppt (siehe +nächsten Abschnitt). Bei erneutem Aufruf der Seite wird es dann +wieder gestartet und die Methode start +erneut aufgerufen.

+ + + + +
 Hinweis 
+
+ + + + +

Stoppen des Applets

+ +

+Durch Aufrufen der Methode stop +zeigt der Browser dem Applet an, dass es gestoppt werden soll: +

+ + + + + +
+ +
+public void stop()
+
+
+
+java.applet.Applet
+ +

+Wie erwähnt, geschieht dies immer dann, wenn eine andere Seite +geladen wird. Während der Lebensdauer eines Applets können +die Methoden start +und stop +also mehrfach aufgerufen werden. Keinesfalls darf ein Applet also +innerhalb von stop +irgendwelche endgültigen Aufräumarbeiten durchführen +und Ressourcen entfernen, die es bei einem nachträglichen Neustart +wieder benötigen würde. + + + + +

Zerstören des Applets

+ +

+Wenn ein Applet ganz bestimmt nicht mehr gebraucht wird (z.B. weil +der Browser beendet wird), ruft der Browser die Methode destroy +auf: +

+ + + + + +
+ +
+public void destroy()
+
+
+
+java.applet.Applet
+ +

+Diese kann überlagert werden, um Aufräumarbeiten zu erledigen, +die erforderlich sind, wenn das Applet nicht mehr verwendet wird. +Eine typische Anwendung von destroy +besteht beispielsweise darin, einen Thread zu zerstören, der +bei der Initialisierung eines Applets angelegt wurde. + + + + +

39.1.4 Weitere Methoden der Klasse Applet

+ + + + +

Methoden zum Nachrichtentransfer

+ +

+Neben diesen vier speziellen Methoden kann ein Applet alle Nachrichten +erhalten, die an ein Component-Objekt +versendet werden. Hierzu zählen Mouse-, MouseMotion-, Key-, Focus- +und Component-Events ebenso wie die Aufforderung an das Applet, seine +Client-Area neu zu zeichnen. Bezüglich Reaktion auf die Events +und die Registrierung und Programmierung geeigneter Listener-Klassen +verhält sich ein Applet genauso wie jedes andere Fenster. In +Kapitel 28 und Kapitel 29 +wurden die möglichen Ereignisse und die Reaktion des Programms +darauf vorgestellt. + + + + +

showStatus

+ +

+Mit der Methode showStatus +kann das Applet einen Text in die Statuszeile des HTML-Browsers +schreiben, der das Applet ausführt: +

+ + + + + +
+ +
+public void showStatus(String msg)
+
+
+
+java.applet.Applet
+ +

+Das folgende Beispiel zeigt ein sehr einfaches Applet, das den Text +»Hello, world« auf dem Bildschirm ausgibt und in die Statuszeile +des Browsers schreibt: + + +

+ + + + + +
+ +
+001 /* Listing3901.java */
+002 
+003 import java.awt.*;
+004 import java.applet.*;
+005 
+006 public class Listing3901
+007 extends Applet
+008 {
+009   public void paint(Graphics g)
+010   {
+011     showStatus("Hello, world");
+012     g.drawString("Hello, world",10,50);
+013   }
+014 }
+
+
+Listing3901.java
+ +Listing 39.1: Ein einfaches Applet

+ + + + +

getParameterInfo

+ +

+Die Klasse Applet +besitzt eine Methode getParameterInfo, +die in abgeleiteten Klassen überlagert werden sollte: +

+ + + + + +
+ +
+public String[][] getParameterInfo()
+
+
+
+java.applet.Applet
+ +

+getParameterInfo +kann vom Browser aufgerufen werden, um Informationen über die +vom Applet akzeptierten Parameter zu erhalten. Der Rückgabewert +von getParameterInfo +ist ein zweidimensionales Array von Strings. Jedes Element des Arrays +beschreibt einen Parameter des Applets durch ein Subarray mit drei +Elementen. Das erste Element gibt den Namen des Parameters an, das +zweite seinen Typ und das dritte eine textuelle Beschreibung des Parameters. +Die Informationen sollten so gestaltet sein, dass sie für menschliche +Benutzer verständlich sind; eine programmgesteuerte Verwendung +ist eigentlich nicht vorgesehen. + +

+Das nachfolgende Listing zeigt eine beispielhafte Implementierung +der Methode getParameterInfo +für das Applet in Listing 39.5: + +

+ + +

+ + + + +
+ +
+001 public String[][] getParameterInfo()
+002 {
+003   String[][] ret = {
+004     {"redwidth","int","Breite eines roten Segments"},
+005     {"whitewidth","int","Breite eines weissen Segments"}
+006   };
+007   return ret;
+008 }
+
+
+ +Listing 39.2: Verwendung von getParameterInfo

+ + + + +

getAppletInfo

+ +

+Ähnlich der Methode getParameterInfo +gibt es eine Methode getAppletInfo, +mit der die Anwendung Informationen über das Applet zur Verfügung +stellen sollte: +

+ + + + + +
+ +
+public String getAppletInfo()
+
+
+
+java.applet.Applet
+ +

+Die Sprachspezifikation gibt an, dass hier ein String zurückgegeben +werden sollte, der Angaben zum Applet selbst, zur aktuellen Version +und zum Autor des Applets macht. Eine beispielhafte Implementierung +könnte so aussehen: + + +

+ + + + +
+ +
+001 public String getAppletInfo()
+002 {
+003   return "AppletBeispiel Ver. 1.0 (C) 1997-99 Guido Krueger";
+004 }
+
+
+ +Listing 39.3: Die Methode getAppletInfo

+
+ + + +
 Titel  + Inhalt  + Suchen  + Index  + DOC  +Handbuch der Java-Programmierung, 5. Auflage, Addison +Wesley, Version 5.0.1 +
 <<  +  <   +  >   + >>  + API  +© 1998, 2007 Guido Krüger & Thomas +Stark, http://www.javabuch.de +
+ + + -- cgit v1.2.3