Titel   Inhalt   Suchen   Index   DOC  Handbuch der Java-Programmierung, 7. Auflage
 <<    <     >    >>   API  Kapitel 41 - Applets II

41.2 Kommunikation zwischen Applets



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
Listing 41.3: Die Klasse ChgNextApplet

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
Listing 41.4: Die HTML-Datei mit den drei kommunizierenden Applets

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