Titel | Inhalt | Suchen | Index | DOC | Handbuch der Java-Programmierung, 7. Auflage |
<< | < | > | >> | API | Kapitel 41 - Applets II |
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:
public Applet getApplet(String name) public Enumeration getApplets() |
java.applet.AppletContext |
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 40.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:
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 Membervariablen zugewiesen und die Hintergrundfarbe wird 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 41.2: Die drei kommunizierenden Applets
Titel | Inhalt | Suchen | Index | DOC | Handbuch der Java-Programmierung, 7. Auflage, Addison Wesley, Version 7.0 |
<< | < | > | >> | API | © 1998, 2011 Guido Krüger & Heiko Hansen, http://www.javabuch.de |