Applets
Applets sind kleine Java Programme, die innerhalb einer Webseite ausgeführt werden. Anfangs waren sie der Schlüssel zum Erfolg der Sprache Java im Web, aber heute hat ihre Bedeutung stark abgenommen und man findet meist DHTML, Flash oder ähnliches, wo früher Applets erschienen. Ein Grund hierfür war, dass die Java – Implementierungen der einzelnen Browser sehr unterschiedlich und teilweise veraltet waren. So führte ein jahrelanger Streit zwischen Sun und Microsoft um die Standards der Sprache Java dazu, dass der damals besonders verbreitete Microsoft Browser mit einer veralteten oder gar ohne Java VM ausgeliefert wird.
Heute hat sich die Situation sehr gebessert, es kann auf allen moderen Browsern das Java-Plugin verwendet werden, das die jeweils neuste Java - Implementierung zur Verfügung stellt.
Opera verhält sich wie Netscape 6, Konquerer kann mit jeder VM des Systems zusammenarbeiten.
Das Applet wird dann über den <object><embed>- Tag wie andere Plug-Ins auch eingebunden. Seit Java 1.4 kann das Plugin auch mit dem <applet> - Tag verwendet werden. Voraussetzung ist, dass ein aktuelles Java Runtime installiert wird.
Applets programmieren
Applets sind spezielle Komponenten, die vom Browser kontrolliert werden. Sie unterliegen einem besonderen Sicherheitskonzept (Sandbox) und dürfen beispielsweise nicht auf das Dateisystem des Rechners zugreifen oder andere Server als den, vom dem sie geladen wurden, kontakten. Sie müssen von java.awt.Applet oder javax.swing.JApplet (Swing) abgeleitet sein.
Der Konstruktor hat bei Applets nur eine untergeordnete Bedeutung; Überschrieben Sie vielmehr folgende vier Methoden auf, die wir als Einstiegspunkte benutzen können und die der Browser entsprechend aufruft:
init()
Wir einmal anfangs aufgerufen, nachdem der Code des Applets geladen ist.
start()
Wird nach init() aufgerufen. Kann mehrfach aufgerufen werden, wenn das Applet mit stop() gestoppt wurde.
stop()
Kann aufgerufen werden, wenn das Applet nicht mehr sichtbar ist, beispielsweise weil die Seite runtergescrollt oder entladen wurde.
destroy()
Wird aufgerufen, bevor das Applet endgültig aus dem Speicher entfernt wird.
Soweit die Theorie. Tatsächlich machen die Browser keinengroßen Unterschied zwischen init und start sowie stop und destroy, sondern rufen jeweils beide Methode beim Laden bzw. entladender Seite auf.
Prinzipiell können Sie in einem Applet alle bekannten Komponenten wie Buttons, Listen usw. verwenden, um Benutzeroberflächen herzustellen. Nutzen Sie dazu einfach Applet#add(Component) bzw. JApplet#getContentPane().add(Component) mit den entsprechenden Layout-Managern. Wir wollen hier einen anderen Weg gehen und ein bisschen mit der Grafik – Programmierung anfangen. Dazu bauen wir ein einfaches Laufschrift – Applet.
Applets für die Webseite
Applets können über den Applet Tag in eine HTML-Seite eingebunden werden. Der Applet Tag ist nach neueren W3CSpezifikationen nicht mehr empfohlen, aber er wird natürlich immer noch haufig verwendet. Sie können folgende Angaben in demTag vornehmen:
<applet width=“123“ height=“123“ // obligatorisch code=”mypackage.TheClass” // obligatorisch oder object object=”serializiertesObject.ser” // anstelle von Code codebase=”../classes“ // Verzeichnis, in dem die Klassen zu finden sind; // kann weggelassen werden, wenn dasselbe wie html archive=“applet.jar“ // Ein Archiv, das in ../classes zu finden ist und die // Class – Dateien und Ressourcen enthält. // ACHTUNG: Dies wird von der Microsoft VM nicht // unterstützt. Verwenden Sie „cabbase“ mit // Cabinet – Dateien oder legen Sie die Klassen // lose ins Verzeichnis. > <param name=“param_name“ value=“Hallo Welt“></param> </applet>
Eingeschachtelt in den Applet-Tag können Sie dem Applet Parameter übergeben, die das Applet mit getParameter(„param_name") auslesen kann.
Seit Java 1.4 können Sie zusätzliche Applet-Parameter verwenden, die spezifizieren, was angezeigt werden soll, während das Applet geladen wird. So kannman ein Bild und einen Text ausgeben sowie die Farben für Hintergrund und Statusbalken bestimmen. Einzelheiten bei Sun.
Wie bereits erwähnt, können Sie die Nutzung des Java-Plugins mit dem Object / Embed Tag erzwingen. Das Java – Plugin ist ein Teil des JRE (Java Runtime) und ermöglicht es praktisch allen Browsern, eine aktuelle Java-Versionzu verwenden. Da der Tag nicht ganz einfach zu schreiben ist, hat Sun ein Tool bereitgestellt, das den Applet – Tag in den neuen Plugin – Tag umwandelt. Das Tool heißt HtmlConverter, Sie finden esunter $JDK_HOME/bin. Die Bedienung ist intuitiv.
Wenn Sie Applets entwickeln und etwas funktioniert nicht wie erwartet denken Sie daran, dass die Browser Java – Klassen hemmungslos cachen. Eine einmal vorhandene Java – Class Datei wird so gut wie nie aktualisiert. Wenn Sie keine Lust haben, den Browsercache dauernd zulöschen, nutzen Sie doch den Appletviewer, um Ihre Appletsauszuführen:
appletviewer myappletpage.html.Myappletpage.html
ist dabei eine HTML-Seite, die entweder den Applet-Tag oder den Object / Embed – Tag enthält.
Grafikprogrammierung mit dem AWT
Um in einem Applet zu zeichnen, überschreiben wir dieMethode paint(Graphics),die unser Applet von java.awt.Component geerbt hat. Paint ist bei allen Komponenten mit für die Optik zuständig, und indem wir die Methode überschreiben, können wir unsere eigene grafische Implementierung realisieren. Sie können damit auch eigene Komponenten realisieren.
Die init() - Methode wird vom Browser aufgerufen, wenn das Applet erzeugt wird. Bei jedem Neuzeichnen wird stets paint(Graphics) aufgerufen, wo das Aussehen des Applets gezeichnet wird.
Das java.awt.Graphics– Objekt, das wir in paint(Graphics) bekommen, repräsentiert einen grafischen Kontext, in diesem Fall den Bildschirm. Im Falle eines anderen Kontexts, z.B. des Druckers, erhalten Sie einen anderen Kontext, können aber dieselben Befehle verwenden. Graphics bietet eine Reihe von Methoden an, die Sie zum Zeichnen verwenden können. Bitte studieren Sie den Quellcode von SomeGraphics.java. Wie Sie erkennen können, haben wir einen „Stift" , mit dem wir zeichnen können. Wir können Linien und Rechtecke zeichnen, die auchgefüllt sein können (fillRectangle()). Die Farbe des Stifts läßt sich mit setColor(Color) verändern. Die Methode drawString(..) gibt Text aus, wobei die Schriftart mit setFont(..) gesetzt werden kann. In der Klassendokumentation zu java.awt.Graphics finden Sie Zeichenmethoden, die ähnlich funktionieren.
Bei den meinsten Methoden übergibt man auch Koordinaten, die die Position der Figuren bestimmen. Diese sind in Pixel angegeben und beziehen sich auf die linke obere Ecke.
Aufgabe: HalloWeltApplet
Schreiben Sie das HalloWeltApplet, das den Satz "Hallo Welt" mittels Grafikfunktionen ausgibt. Erstellen Sie eine HTML-Seite und zeigen Sie das Applet im Browser an.
Verbessern Sie die Funktionalität des Applets, indem der anzuzeigende Text als Parameter aus der HTML - Seite mittels des Parameter-Tags übergeben werden kann.
Musterlösung: java1.aufg.referenz.HalloWeltApplet