Titel | Inhalt | Suchen | Index | DOC | Handbuch der Java-Programmierung, 3. Auflage
<< | < | > | >> | API | Kapitel 40 - Applets II

## 40.2 Kommunikation zwischen Applets

- 40.2 Kommunikation zwischen Applets

Wenn mehr als ein Applet auf einer Web-Seite plaziert wurde, ist es mitunter wünschenswert, daß 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, daß 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 muß 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 Web-Seite 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 40.3: Die Klasse ChgNextApplet

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

Listing 40.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 40.2: Die drei kommunizierenden Applets

Titel | Inhalt | Suchen | Index | DOC | Handbuch der Java-Programmierung, 3. Auflage, Addison Wesley, Version 3.0
<< | < | > | >> | API | © 1998-2002 Guido Krüger, http://www.javabuch.de