Java/Applet
Ein Java-Applet ist ein Computerprogramm, das mittels Java-Technologie erstellt und normalerweise in einem Webbrowser ausgeführt wird. Applets wurden eingeführt, um Programme in Webseiten ablaufen lassen zu können, die im Webbrowser (auf der Client-Seite) arbeiten und direkt mit dem Benutzer interagieren können, ohne Daten zum Server senden zu müssen. Java-Applets waren Ende der 1990er Jahre mit ein Grund für den Erfolg und die schnelle Verbreitung von Java.
Inhaltsverzeichnis
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.
- nach http://de.wikipedia.org/wiki/Java-Applet , 03.05.2006
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
}
}
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);
}
}
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));
}
}
}
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));
}
}
}
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:
- http://de.wikibooks.org/wiki/Java_Standard:_Grafische_Oberfl%C3%A4chen_mit_AWT
- http://www.realapplets.com/tutorial/ActionExample.html
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();
}
}
}
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:
- http://de.wikibooks.org/wiki/Java_Standard:_Grafische_Oberfl%C3%A4chen_mit_AWT#Texteingabefelder
- docs.oracle: java.awt Class Graphics
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:
- wikibooks: Java Standard: Grafische Oberflächen mit AWT