Universität Paderborn Prof. Dr. Stefan Böttcher Kapitel 3: Java Applets Grundlagen der Programmierung 2, SS 2008 1 Universität Paderborn Prof. Dr. Stefan Böttcher 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> Grundlagen der Programmierung 2, SS 2008 2 Universität Paderborn Prof. Dr. Stefan Böttcher Beispiel 1: Applet1.html <html> <head> <title>Main</title> </head> <body> <hr> Ein Applet, das Werte des Textfeldes beim Ausl&ouml;sen eines ActionEvents, z.B. durch Dr&uuml;cken der Enter-Taste, in die TextArea &uuml;bernimmt <p> <applet code="Applet1.class" width="600" height="400"> </applet> </p> <hr> </body> </html> Grundlagen der Programmierung 2, SS 2008 3 Universität Paderborn Prof. Dr. Stefan Böttcher 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(); }… } Grundlagen der Programmierung 2, SS 2008 4 Universität Paderborn Prof. Dr. Stefan Böttcher 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 } } Grundlagen der Programmierung 2, SS 2008 5 Universität Paderborn Prof. Dr. Stefan Böttcher 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. } Grundlagen der Programmierung 2, SS 2008 6 Universität Paderborn Prof. Dr. Stefan Böttcher In Applets Oberflächen gestalten Da JApplet eine Unterklasse von Panel ist, kann man wie bei andern SwingKomponenten 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. Grundlagen der Programmierung 2, SS 2008 7 Parameterübergabe an Applets (1) Universität Paderborn Prof. Dr. Stefan Böttcher <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 Grundlagen der Programmierung 2, SS 2008 8 Parameterübergabe an Applets (2a) Universität Paderborn Prof. Dr. Stefan Böttcher 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 } } Grundlagen der Programmierung 2, SS 2008 Applet4.java 9 Parameterübergabe an Applets (2b) Universität Paderborn Prof. Dr. Stefan Böttcher 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 Grundlagen der Programmierung 2, SS 2008 10 Universität Paderborn Prof. Dr. Stefan Böttcher 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) ; Grundlagen der Programmierung 2, SS 2008 // Thread wartet 500 ms 11 Universität Paderborn Prof. Dr. Stefan Böttcher Applets und Threads - Beispiel (1) import java.awt.* ; import javax.swing.JApplet ; public class SE6 extends JApplet { public void init() { MyT myt = new MyT(getGraphics()) ; myt.start(); // 1x bei Initialisierung // im neuangelegten Thread // Graphik übergeben // starte angelegten Thread } class MyT extends Thread { Graphics ag ; MyT( Graphics g ) { ag=g ; } public void run() { ... } // definiert Thread // Graphik lokal speichern // im Thread-Kontruktor // Graphik übernehmen // wenn Thread läuft, tue ... } } Grundlagen der Programmierung 2, SS 2008 12 Universität Paderborn Prof. Dr. Stefan Böttcher Applets und Threads - Beispiel (2) class MyT extends Thread // definiert Thread { Graphics ag ; MyT( Graphics g ) { ag=g ; } // übernehme Zeichenfläche public void run() // wenn Thread läuft, tue folgendes: { int x=200, y=200 ; while (true) try { sleep(500) ; // Thread wartet 500 ms x+=10 ; y+=10 ; repaint() ; // neu zeichnen ag.drawRect( 100, 100, x, y ) ; ag.drawOval( 100, 100, x, y ) ; } catch ( InterruptedException e ) { } // unterbrochen? } } Grundlagen der Programmierung 2, SS 2008 13 Universität Paderborn Prof. Dr. Stefan Böttcher 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 Grundlagen der Programmierung 2, SS 2008 14