Applet

aus ZUM-Wiki, dem Wiki für Lehr- und Lerninhalte auf ZUM.de
Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Was sind Applets – Theoretischer Hintergrund

  • Ein Java-Applet ist ein kleines Computerprogramm, das in der Programmiersprache Java verfasst wurde.
  • Java-Applets wurden eingeführt, um Programme in Web-Seiten ablaufen lassen zu können, die im Webbrowser (auf der Client-Seite) arbeiten und direkt mit dem Benutzer interagieren können, ohne Daten über die Leitung zum Server versenden zu müssen.
  • Java-Applets waren Ende der 1990er Jahre ein Hauptgrund für den Erfolg und die schnelle Verbreitung von Java. (...)
  • Applets werden auf dem Rechner des Anwenders ausgeführt und stellen daher - wie jedes lokal ausführbare Programm - ein Sicherheitsrisiko dar. Da die Applets in einer abgeschotteten Laufzeitumgebung (Sandbox) laufen, ist dieses Risiko jedoch gut kontrollierbar. Ein Sicherheitsrisiko durch "böswillige" Applets besteht nur, wenn die Sandbox fehlerhaft ist.

Kennzeichen von Applets

Sie verfügen unter anderen über die folgenden Methoden:

init() - wird genau einmal aufgerufen, wenn das Applet erstmals in den Browser geladen wird. 
start() - wird jedesmal aufgerufen, wenn das Applet sichtbar wird. 
paint(...) - Zeichenmethode für die Anzeigefunktionen des Applet 
stop() - wird jedesmal aufgerufen, wenn das Applet verdeckt wird, z.B. weil das Browser-Fenster von einem anderen Fenster überdeckt wird. 
destroy() - wird aufgerufen, wenn das Applet aus dem Hauptspeicher entladen wird. 

Beispiel 1

Ein einfaches Beispiel HalloWelt.java (hier wird nur paint() überschrieben um gezielt ab der Stelle 100,100 den Text ausgeben zu können):

import java.awt.*;
import java.applet.Applet; 
public class HalloWelt extends Applet 
{            
   public void paint( Graphics g ) 
   {
       g.drawString( "Mein erstes Java-Applet!",100,100 );    // Grafik-Text
   }                                             
}
Hand.gif   Übung

Testen Sie das Applet. Ändern Sie Text und Position der Ausgabe. Fügen Sie eine zweite Ausgabe hinzu.

Shapes

Die Schnittstelle um graphische Objekte wie Shapes, oder aber auch Bilder zu zeichnen, ist in Java das Graphics-Objekt.

Ausgabe eines Strings:

  • g.drawString( "Mein erstes Java-Applet!",100,100 );

Ausgabe eines Strings mit anderem Zeichensatz und Farbe

  • g.setFont(new Font("Dialog", Font.PLAIN, 18));
  • g.setColor(Color.BLUE);
  • g.drawString("Hallo Welt", 10,40);

Ausgabe eines ausgefüllten abgerundeten Rechtecks

  • g.fillRoundRect(startX,startY,breite,hoeher,radiusAbrundungX,radiusAbrundungY);

Zum Beispiel:

  • g.fillRoundRect(50,70,20,30,10,20);

aus: http://de.wikibooks.org/wiki/Java_Standard:_Das_Graphics_Object

In der offiziellen Java-Dokumentation finden Sie alle Methoden der Klasse Graphics hier:

Ein Haus

import java.awt.*;
import java.applet.Applet; 
public class HalloWelt extends Applet 
{            
   public void paint( Graphics g ) 
   {
       g.setColor(Color.BLUE);
       g.drawRect(100,150,200,100);
       g.setColor(Color.RED);
       g.drawLine(100,150,200,50);
       g.drawLine(300,150,200,50);
    }                                             
}
Hand.gif   Übung
  1. Setzen Sie dem Haus eine Schornstein und ergänzen Sie ein Fenster und eine Sonne.
  2. Zeichnen Sie als Übung zur Grafik ein beliebiges Bild.

Zufallsfigur

import java.awt.*;
import java.applet.Applet;
import java.util.Random;
public class Zufallsfigur extends Applet 
{
    private static final Random rand = new Random();
    public void paint( Graphics g ) 
    {
        g.setColor(Color.BLUE);
        for (int i = 1; i <= 1000; i++)
        {
            g.setColor(Color.RED);
            g.drawString(""+rand.nextInt(500), i*10,i*10);
            g.setColor(Color.BLUE);
            g.drawLine(rand.nextInt(500),
                       rand.nextInt(500),
                       rand.nextInt(500),
                       rand.nextInt(500));
        }
    }                                             
}
Hand.gif   Übung
  1. Mathematische Aufgabe: Warum liegen in der Mitte des Bildes mehr blaue Halme als außen?
  2. Entwerfen Sie ein Zufallsbild mit Kreisen.

Applets und Threads

„Nebenläufigkeit (concurrency) ist die Fähigkeit eines Systems zwei oder auch mehrere Aufgaben (scheinbar) gleichzeitig auszuführen. In Java kann die Ausführungsparallelität innerhalb eines Programmes mittels Threads (lightweight processes) erzwungen werden.“

Das folgende Applet zeichnet alle halbe Sekunde 5 Linien auf den Bildschirm.

import java.awt.*;
import java.applet.Applet;
import java.util.Random;
public class ZufallsfigurMitThread extends Applet implements Runnable
{  
    Thread thread;
    private static final Random rand = new Random();
 
    public void init()
    {
        thread= new Thread(this); // thread ist ein neuer Thread dieses Applets
        thread.start(); // starte den Thread
    }  
 
    public void destroy()
    {
        thread = null; // Beim Verlassen des Applets setze den Thread auf null
    } 
 
    public void run()
     {
          while (true) // solange true, also immer
          {    
               repaint(); // rufe paint auf 
               try // und versuche, 500 Millisekunden zu warten
               {
                   Thread.sleep(500);
               }
               catch (InterruptedException e) // wenn das mit dem Warten nicht geklappt hat, 
               {
                    System.out.println(e); // dann gib einen Fehler aus.
               }
          }
 
     } 
 
    public void paint( Graphics g ) 
    {
       g.setColor(Color.BLUE);
       for (int i = 1; i <= 5; i++)
       {
           g.setColor(Color.BLUE);
           g.drawLine(rand.nextInt(500),
                      rand.nextInt(500),
                      rand.nextInt(500),
                      rand.nextInt(500));
       }
    }                                             
}
Hand.gif   Übung
  1. Ändern Sie die Geschwindigkeit, die Farbe und die Anzahl der Linien.
  2. Entwerfen Sie eine eigene Zufallsgrafikenanimation.

GUI und Applet

Kaum ein modernes Programm kommt heutzutage ohne eine ansprechende GUI aus. Daher hier nun ein Beispiel, wie man mit Beschriftungen und Buttons in Java umgeht.

Grobe Erklärung der Funktionsweise: Ein neuer Button wird angelegt. Dieser bekommt einen ActionListener zugewiesen. Der sorgt dafür, dass actionPerformed aufgerufen wird, wenn der Button gedrückt ist. Da man manchmal mehrere Elemente hat, prüft man mit if (evt.getSource() == button), ob das ActionEvent „evt“ auch wirklich vom Button button stammt.

Vertiefend:

import java.awt.*;
import java.awt.event.*;
import java.applet.Applet; 
public class GUI_1 extends Applet implements ActionListener
{  
    Label label;
    Button button;
    int anzahl;
 
    public void init()
    {
        button = new Button("Schaltfläche");
        button.addActionListener(this);
        add (button);
 
        label = new Label("Du hast kein mal gedrückt");  
        add(label);
    }  
 
 
    public void actionPerformed(ActionEvent evt) 
    {
         if (evt.getSource() == button) {
              anzahl++;
              label.setText("Du hast "+anzahl+" mal gedrückt");
              repaint();
         }
    } 
 
}
Hand.gif   Übung
  1. Legen Sie ein zweites Label an, was anzeigt, wie oft man noch drücken muss, bis 100 erreicht ist.
  2. Legen Sie einen zweiten Button an, der herunterzählen lässt.

Textfeld

Die folgende Klasse verwendet neben Buttons und Labels auch Textfelder. In diesen können Benutzer Eingaben tätigen, die mit getText() abgefragt werden können. setText(...) ändert den Text.

Vertiefend:

import java.awt.*;
import java.awt.event.*;
import java.applet.Applet; 
public class GUI_2 extends Applet implements ActionListener
{  
    Label label;
    Button button;
    TextField textfield;
    int anzahl;
 
    public void init()
    {   
        textfield = new TextField("niemand");
        add (textfield);
        button = new Button("Begrüße");
        button.addActionListener(this);
        add (button);
 
        label = new Label("Ich kenne dich nicht!");  
        add(label);
    }  
 
 
    public void actionPerformed(ActionEvent evt) 
    {
         if (evt.getSource() == button) {
              label.setText("Hallo "+textfield.getText());
              repaint();
         }
    } 
 
}

Textarea

Mehrzeilige Texteingabefelder können Sie mit der Klasse TextArea erstellen. Zusätzlich zu dem Anfangstext gibt man beim Anlegen noch die Zeilenanzahl und die Breite in Buchstaben an. Hinweis: \n wechselt im TextArea die Zeile, führt aber z.B. in einzeiligen Labels zu Problemen!

textarea = new TextArea("Hallo Welt!\nWo bist du?", 5,30));

Weitere GUI-Elemente

Wie Menus, Radiobuttons, Listen etc. sowie Tipps zum Layout finden Sie hier: http://de.wikibooks.org/wiki/Java_Standard:_Grafische_Oberfl%C3%A4chen_mit_AWT

Weblinks

Siehe auch