From 33613a85afc4b1481367fbe92a17ee59c240250b Mon Sep 17 00:00:00 2001
From: Sven Eisenhauer
+Wenn mehr als ein Applet auf einer Webseite platziert wurde, ist es
+mitunter wünschenswert, dass die Applets miteinander kommunizieren.
+Da Applets gewöhnliche Java-Objekte sind, ist es prinzipiell
+nicht schwer, aus einem Applet heraus öffentliche Methoden oder
+Membervariablen eines anderen Applets aufzurufen. Dazu ist es allerdings
+erforderlich, dass ein Applet in den Besitz einer Instanz eines anderen
+Applets gelangt. Der Applet-Kontext stellt dazu zwei Methoden zur
+Verfügung:
+
+
+getApplets
+liefert eine Enumeration
+mit allen Applets, die sich auf derselben Seite befinden. Sofern sie
+für den Aufrufer unterscheidbar sind, kann daraus das gewünschte
+Applet ausgewählt werden. getApplet
+liefert dagegen genau das Applet mit dem als Parameter angegebenen
+Namen. Dieser muss dem NAME-Parameter
+des gewünschten Applets entsprechen (siehe Abschnitt 39.2.2).
+
+
+Wir wollen uns ein einfaches Beispiel für die Kommunikation von
+drei Applets, die sich auf derselben Webseite befinden, ansehen. Dazu
+soll eine Klasse ChgNextApplet
+geschrieben werden, die den zur Verfügung stehenden Platz in
+der aktuellen Hintergrundfarbe einfärbt. Nach einem Mausklick
+soll die Hintergrundfarbe eines anderen, mit dem NEXT-Parameter spezifizierten,
+Applets verändert werden.
+
+
+Der Code für die Applet-Klasse kann wie folgt realisiert werden:
+
+
+
+
+
+
+ Titel
+ Inhalt
+ Suchen
+ Index
+ DOC
+ Handbuch der Java-Programmierung, 5. Auflage
+
+ <<
+ <
+ >
+ >>
+ API
+ Kapitel 40 - Applets II
+
+
+
+
+
+40.2 Kommunikation zwischen Applets
+
+
+
+
+
+
+
+
+
+
+
+
+
+public Applet getApplet(String name)
+
+public Enumeration getApplets()
+
+
+
+java.applet.AppletContext
+
+
+
+Listing 40.3: Die Klasse ChgNextApplet
+
+
+
+
+
+001 /* ChgNextApplet.java */
+002
+003 import java.awt.*;
+004 import java.awt.event.*;
+005 import java.applet.*;
+006 import java.util.*;
+007
+008 public class ChgNextApplet
+009 extends Applet
+010 {
+011 private String next;
+012
+013 public void init()
+014 {
+015 next = getParameter("next");
+016 setBackground(Color.red);
+017 addMouseListener(
+018 new MouseAdapter()
+019 {
+020 public void mouseClicked(MouseEvent event)
+021 {
+022 if (next != null) {
+023 Applet applet = getAppletContext().getApplet(next);
+024 if (applet != null) {
+025 int red = (int)(Math.random() * 256);
+026 int green = (int)(Math.random() * 256);
+027 int blue = (int)(Math.random() * 256);
+028 applet.setBackground(new Color(red, green, blue));
+029 applet.repaint();
+030 }
+031 }
+032 }
+033 }
+034 );
+035 }
+036
+037 public void paint(Graphics g)
+038 {
+039 g.drawString("Change " + next, 5, 20);
+040 }
+041 }
+
+
+ChgNextApplet.java
+
+In init +wird der NEXT-Parameter ausgelesen und einer Membervariable zugewiesen +und die Hintergrundfarbe zunächst auf rot gesetzt. Anschließend +wird ein MouseListener +registriert, der bei jedem Mausklick das NEXT-Applet beschafft, seinen +Hintergrund in einer zufällig ausgewählten Farbe einfärbt +und repaint +aufruft, um es neu darzustellen. + +
+Wir wollen nun eine HTML-Seite anlegen, die drei Instanzen von ChgNextApplet +erzeugt. Sie sollen die Namen »A1«, »A2« und »A3« +erhalten und sich gegenseitig als NEXT-Applet registrieren. Ein Mausklick +auf »A1« ändert die Farbe von »A2«, ein Klick +auf »A2« die von »A3« und ein Klick auf »A3« +die von »A1«. Dazu kann folgende Datei ThreeApplets.html +verwendet werden: + + +
+
+
++001 <html> +002 <head> +003 <title>ThreeApplets</title> +004 </head> +005 <body> +006 +007 A1: +008 <applet code="ChgNextApplet.class" width=90 height=30 name="A1"> +009 <param name="next" value="A2"> +010 Applet A1 +011 </applet> +012 +013 <p> +014 A2: +015 <applet code="ChgNextApplet.class" width=90 height=30 name="A2"> +016 <param name="next" value="A3"> +017 Applet A2 +018 </applet> +019 +020 <p> +021 A3: +022 <applet code="ChgNextApplet.class" width=90 height=30 name="A3"> +023 <param name="next" value="A1"> +024 Applet A3 +025 </applet> +026 +027 </body> +028 </html>+ + |
++ThreeApplets.html | +
+Die HTML-Seite kann nun im Browser aufgerufen werden. Nach einigen +Mausklicks könnte die Darstellung so aussehen: +
+ +
+Abbildung 40.2: Die drei kommunizierenden Applets
+| 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 + |