Kapitel 3: Java Applets 1
Was sind Applets? kleine in Fenstern ausführbare Programme typisch: Aufruf im Browserfenster als Teil einer HTML-Seite <html> <head> </head> <body> Anfang des umgebenden HTML-Textes <applet code="applet1.class" width="600" height="400"> </applet> Ende des umgebenden HTML-Textes </body> </html> 2
Beispiel 1: Applet1.html <html> <head> <title>main</title> </head> <body> <hr> Ein Applet, das Werte des Textfeldes beim Auslösen eines ActionEvents, z.b. durch Drücken der Enter-Taste, in die TextArea übernimmt <p> <applet code="applet1.class" width="600" height="400"> </applet> </p> <hr> </body> </html> 3
Beispiel 1: Applet1.java (1) public class Applet1 extends JApplet { private JTextField tfio; private JTextArea taoutput; public void init() { // wird 1x beim starten gerufen tfio = new JTextField("pc600"); taoutput = new JTextArea(""); taoutput.seteditable(false); Container cp = getcontentpane(); cp.add(tfio, BorderLayout.NORTH); cp.add(taoutput, BorderLayout.CENTER); tfio.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { updatetext(); ); updatetext(); 4
Beispiel 1: Applet1.java (2) public class Applet1 extends JApplet { private JTextField tfio; private JTextArea taoutput; public void init() { tfio.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { updatetext(); ); updatetext(); public void updatetext() { private String ausgabe = "\nhallo sagt\nihr Applet\n"; ausgabe += tfio.gettext(); taoutput.settext(ausgabe); // in die TextArea schreiben 5
Typische Verwendung der Applet-Methoden können in Applets (Unterklassen von JApplet) neu definiert werden. class meinapplet extends JApplet { public void init() {... // wird 1x beim Laden des Applets aufgerufen // darin definiert man GUI-Komponenten und Listener public void start() {... // wird beim 1. Lauf des Applets aufgerufen // darin startet man Anwedungen (Threads) public void paint( Graphics g ) {... // wird bei jedem Neuzeichnen des Applets aufgerufen // darin zeichnet man Diagramme etc. 6
In Applets Oberflächen gestalten Da JApplet eine Unterklasse von Panel ist, kann man wie bei andern Swing- Komponenten auch GUI-Komponenten hinzufügen (Buttons, Labels, Edit-Felder, ) und dieselben Events behandeln in public void init() {... // wird 1x beim Laden des Applets aufgerufen // darin definiert man GUI-Komponenten und Listener Wie in Swing kann man auf die Zeichenfläche von Applets zeichnen in public void paint( Graphics g ) {... // wird bei jedem Neuzeichnen des Applets aufgerufen // darin zeichnet man Diagramme etc. 7
Parameterübergabe an Applets (1) <html> <head> <title>applet mit Parametern</title> </head> <body> <hr> Wir setzen Parameter filiale="frankfurt am Main" <p> <applet code="applet4.class" width="400" height="200"> <param name="filiale" value="frankfurt am Main"> </applet> </p> <hr> </body> </html> Applet4.html 8
Parameterübergabe an Applets (2a) import java.awt.event.actionlistener; import javax.swing.*; public class Applet4 extends JApplet { private JTextField tf; private JTextArea anzeige; public void init() { // wird 1x beim starten gerufen... // Oberfläche konstruieren siehe nächste Folie String filialort = getparameter("filiale"); // Parameter tf.settext( filialort ) ; // in Textfeld schreiben updatetext(); private void updatetext() { String ausgabe = "\nkaufen Sie am besten direkt in unserer Filiale\n"; ausgabe += tf.gettext(); anzeige.settext(ausgabe); // in die TextArea schreiben Applet4.java 9
Parameterübergabe an Applets (2b) public void init() { // wird 1x beim starten gerufen JLabel l = new JLabel("Ihr Wohnort: "); // Label anlegen tf = new JTextField(""); // Textfeld anlegen anzeige = new JTextArea(""); // TextArea anlegen anzeige.seteditable(false); // TextArea nichteditierbar JPanel panel = new JPanel(); // Panel anlegen panel.setlayout(new FlowLayout()); // Panel-Layout festlegen panel.add(l); // Label aufs Panel panel.add(tf); // Textfeld aufs Panel Container cp = getcontentpane(); // Applet-Container holen cp.add(panel, BorderLayout.NORTH); // Panel auf den Container cp.add(anzeige, BorderLayout.CENTER); // TextArea zum Container tf.addactionlistener(new ActionListener() { // tf soll reagieren public void actionperformed(actionevent e) { // auf Return updatetext(); // mit updatetext(); // ); // Ende anonyme Klasse String filialort = getparameter("filiale"); // Parameter abfragen tf.settext( filialort ) ; // u. in Textfeld schreiben updatetext(); Applet4.java 10
Applets und Threads Threads sind leichtgewichtige Prozesse, die nebenläufig zu anderen Threads abgearbeitet werden können ( mehr dazu in einem Extra-Kapitel) In Applets können Threads gestartet werden in: class meinapplet extends JApplet { public void start(){ // wird beim 1. Lauf des Applets aufgerufen // darin startet man Anwedungen (Threads) Ein Thread führt, während er läuft, seine run()-methode aus. Laufende Threads können u.a. eine Zeit lang angehalten werden, z.b. sleep(500) ; // Thread wartet 500 ms 11
Applets und Threads - Beispiel (1) import java.awt.* ; import javax.swing.japplet ; public class SE6 extends JApplet { public void init() { // 1x bei Initialisierung MyT myt = new MyT(getGraphics()) ; // im neuangelegten Thread // Graphik übergeben myt.start(); // starte angelegten Thread class MyT extends Thread // definiert Thread { Graphics ag ; // Graphik lokal speichern MyT( Graphics g ) { ag=g ; // im Thread-Kontruktor // Graphik übernehmen public void run() // wenn Thread läuft, tue... {... 12
Applets und Threads - Beispiel (2) class MyT extends Thread { Graphics ag ; MyT( Graphics g ) { ag=g ; // definiert Thread // übernehme Zeichenfläche public void run() { int x=200, y=200 ; while (true) try { sleep(500) ; x+=10 ; y+=10 ; repaint() ; // wenn Thread läuft, tue folgendes: // Thread wartet 500 ms // neu zeichnen ag.drawrect( 100, 100, x, y ) ; ag.drawoval( 100, 100, x, y ) ; catch ( InterruptedException e ) { // unterbrochen? 13
Zusammenfassung Applets Applets sind kleine in Fenstern ausführbare Programme typisch: Aufruf im Browserfenster als Teil einer HTML-Seite man kann (wie bei andern Swing-Komponenten auch) GUI-Komponenten hinzufügen (Buttons, Labels, Edit-Felder, ) und dieselben Events behandeln man kann in der init-methode von Applets (wie in anderen Programmen auch) Threads erzeugen und Thread starten 14