14. Applets Java-Beispiel: TempApplet.java K. Bothe, Inst. f. Informatik, HU Berlin, PI1, WS 2006/07 Version: 2. Feb. 2007 Schwerpunkte • Kommandozeilengesteuerte oder graphische Nutzeroberfläche • Anwendungen und Applets • Erstes Applet-Programm: Temperaturberechnung K. Bothe, Inst. f. Informatik, HU Berlin, PI1, WS 2006/07 2 Zwei Arten von Java–Programmen • Applikationen / Anwendungen: Direkte Ausführung mit dem Java-Interpreter (java Temperature) • Applets: Start mit Hilfe eines Web-Browsers (Firefox, Mozilla, Microsoft Internet Explorer) K. Bothe, Inst. f. Informatik, HU Berlin, PI1, WS 2006/07 3 Java-Applets durch Web-Browser starten? Î HTML erweitern Im Detail: Æ Kompilierte Java-Programme (Hallo.class) in Web-Seiten einbinden Æ Web-Browser kennt Java-Interpreter: ruft ihn auf Æ Java-Applets können über das Netz geladen und direkt vom Browser ausgeführt werden (virtuelle .class-Programme - nicht .java-Quellen) Æ Applets laufen in graphischer Oberfläche der Web-Seite (z. B. Internet Explorer-Oberfläche) K. Bothe, Inst. f. Informatik, HU Berlin, PI1, WS 2006/07 4 HTML-Dokumente: Bestandteile • Text (mit Hervorhebungen: Farben, Unterstich, Dicke, Größe) • Verweise auf andere Dokumente: <a href="http://www.informatik.hu-berlin.de"> • Bilder: <img align=bottom height=20 src="bilder/earth2.gif" border=0> • Programme: laufen als Teil der Webseite <applet CODE="TempApplet.class" WIDTH=300 HEIGHT=100> </applet> K. Bothe, Inst. f. Informatik, HU Berlin, PI1, WS 2006/07 5 Beispiel: TempApplet.html <html> <head> <title>Temperatur-Umwandlung!</title> </head> <body> <P> <b> <a href= "http://www.informatik.hu-berlin.de"> Institut fuer Informatik, Humboldt-Universitaet zu Berlin </a> </b> <P> <b>Temperatur-Umwandlung:Fahrenheit -> Celsius</b> <hr> <P> <applet CODE="TempApplet.class" WIDTH=300 HEIGHT=100> </applet> </body> </html> K. Bothe, Inst. f. Informatik, HU Berlin, PI1, WS 2006/07 6 Firefox: TempApplet.html geladen Wirkung des Applet K. Bothe, Inst. f. Informatik, HU Berlin, PI1, WS 2006/07 7 Appletviewer: aktiviert Applets direkt > appletviewer TempApplet.html Applet testen - Nicht gleich das gesamte HTML-File K. Bothe, Inst. f. Informatik, HU Berlin, PI1, WS 2006/07 8 Applet-Beispiel: TempApplet.java 3 Pakete import java.awt.*; import java.applet.*; import java.awt.event.*; Temp A Mehrfachvererbung double fahr = 0.0, cent = 0.0; fahr = Integer.parseInt(tFahr.getText()); cent = 5.0 * (fahr - 32) / 9.0; lCent.setText(fahr + " deg F is " + cent + " deg C"); 2 Dialogelemente // Convert from Fahrenheit to Centigrade TextField tFahr; Label lCent; // Lay out the three Components add(new Label("Please type the temperature (deg F): ")); add(tFahr); add(lCent); .java // Respond to Action Event: // typing in the tFahr TextField public void actionPerformed (ActionEvent e) { public class TempApplet extends Applet implements ActionListener { public void init() { // Create the TextField and the Label tFahr = new TextField(10); lCent = new Label( "I’ll tell you what that is in degrees C"); pplet } } 2 Methoden // Register the Component Listener tFahr.addActionListener(this); } K. Bothe, Inst. f. Informatik, HU Berlin, PI1, WS 2006/07 9 Vergleich: Applikation - Applet Applikation Applet Temperature TempApplet main() init() actionPerformed() per m e T va a j . e atur K. Bothe, Inst. f. Informatik, HU Berlin, PI1, WS 2006/07 Tem pApp let.ja va 10 Programmentwicklung: Applets Editor TempApplet.java HTML: <applet CODE="TempApplet.class" . . . </applet> Compiler TempApplet.class Abarbeitung: JavaInterpreter K. Bothe, Inst. f. Informatik, HU Berlin, PI1, WS 2006/07 Web-Browser Wirkung: Web-Oberfläche 11 Erklärung zum Temperatur-Applet 1. Importe 2. API-Struktur: API - Pakete - Klassen 3. Klasse Applet 4. Initialisierung des Fensters 5. Reaktion auf Ereignisse 6. globale und lokale Variablen K. Bothe, Inst. f. Informatik, HU Berlin, PI1, WS 2006/07 12 Importe import java.awt.*; Programmierung der graphischen Benutzeroberfläche (awt = abstract windowing toolkit) import java.applet.*; Applet-Klasse u. a. import java.awt.event.*; import java.awt.*; import java.applet.*; import java.awt.event.*; public class TempApplet extends Applet implements ActionListener { Ereignisbehandlung // Convert from Fahrenheit to Centigrade TextField tFahr; Label lCent; public void init() { ...} public void actionPerformed (...){...} } K. Bothe, Inst. f. Informatik, HU Berlin, PI1, WS 2006/07 13 Organisation des Java–API Java - API java.applet Textfield java.awt Button java.awt.event Label Pakete: Sammlung von Klassen ... java.lang ... Klassen: Softwarekomponenten Paket-Name (z. B. java.awt.event) spiegelt Directory-Namen wider: Æ /java/awt/event K. Bothe, Inst. f. Informatik, HU Berlin, PI1, WS 2006/07 14 API: Applets (Anzahl der Methoden) Applet: Java-Programm, das von einem Web-Browser gestartet wird Object Component (>100) Container (>50) import java.awt.*; import java.applet.*; import java.awt.event.*; public class TempApplet extends Applet implements ActionListener { Panel (1) // Convert from Fahrenheit to Centigrade TextField tFahr; Label lCent; Applet (>20) K. Bothe, Inst. f. Informatik, HU Berlin, PI1, WS 2006/07 public void init() { ... nicht nur 2 Methoden 15 API-Klasse ‚Applet' An applet is a small program that is intended not to be run on its own, but rather to be embedded inside another application. void init() Called by the browser or applet viewer to inform this applet that it has been loaded into the system. K. Bothe, Inst. f. Informatik, HU Berlin, PI1, WS 2006/07 16 Klasse Applet: Methodenaufrufe TempApplet Start des Programms: analog: main() bei Applikationen init() actionPerformed() Reaktion auf Enter-Taste (Ereignis): - Temperatur-Feld eingelesen - umgerechneter Wert ausgegeben K. Bothe, Inst. f. Informatik, HU Berlin, PI1, WS 2006/07 17 Initialisierung des Fensters Applet-Fenster auf Bildschirm ausgeben (Anfangszustand) public void init ( ) { 1. Erzeugt (noch unsichtbar): - aktives Textfeld (Eingabe) - Label-Textfeld (Ausgabetext) tFahr = new Textfield (10); lCent = new Label (" I’ll tell...); add(new Label ("Please ...")); 2. Komponenten im add(tFahr); Applet-Fenster platziert add(lCent); tFahr.addActionListener(this); } 3. Textfeld tFahr soll ’beobachtet’ werden: bei Enter-Taste soll actionPerformed(…) gerufen werden (Ereignisbehandlung) Bestandteile einer graphischen Oberfläche: > 50 Klassen z. B.: Textfield, Button, Label, Checkbox, Scrollbar ... K. Bothe, Inst. f. Informatik, HU Berlin, PI1, WS 2006/07 18 Wirkung von TempApplet > appletviewer TempApplet.html Nach init(): Label-Textfeld (Ausgabetext) Aktives Textfeld (Eingabe) Label-Textfeld (Ausgabetext) Nach actionPerformed(e): K. Bothe, Inst. f. Informatik, HU Berlin, PI1, WS 2006/07 19 Reaktion auf Ereignisse (Event) - Enter-Taste public void actionPerformed (...) { double fahr = 0.0; double cent = 0.0; Einlesen aus Textfeld tFahr und Transformation nach Integer fahr = Integer.parseInt(tFahr.getText()); cent = 5.0 * (fahr - 32) / 9.0; Ausgabe des Resultats in das Labelfeld lCent lCent.setText ( fahr + " deg F is " + cent + " deg C "); } GUI: als ADT aufgefasst K. Bothe, Inst. f. Informatik, HU Berlin, PI1, WS 2006/07 zusammengesetzte Zeichenkette 20 Variablen: global in Klasse - lokal in Methode public class TempApplet ... { TextField tFahr ; Label LCent ; public void init ( ) { ... add (tFahr); add(lCent); } global: - sichtbar in gesamter Klasse - Lebensdauer = "gesamte" Zeit lokal: - sichtbar nur in Methode - Lebensdauer = Abarbeitungszeit der Methode public void actionPerformed (...) { double fahr = 0.0; double cent = 0.0; fahr = Integer.parseInt (tFahr.gettext()); } } K. Bothe, Inst. f. Informatik, HU Berlin, PI1, WS 2006/07 21 Objekt der Klasse TempApplet: Aufruf der Methoden Java-Interpreter bei Ereignis (Enter-Taste) zum Start TempApplet actionPerformed (ActionEvent e) lesen init () schreiben initialisieren tFahr 100 lCent 100 deg is 37.7 deg C K. Bothe, Inst. f. Informatik, HU Berlin, PI1, WS 2006/07 22 Applet-Abarbeitung: Start class TempApplet extends Applet ... { init() actionPerformed(...) } 4. Wirkung: Dialgelemente tFahr, lCent auf Bildschirm TempApplet.html: <applet ... "TempApplet.class" ...> 3. ruft auf 1. liest Web-Browser: Internet Explorer o.a. 2. ruft auf K. Bothe, Inst. f. Informatik, HU Berlin, PI1, WS 2006/07 JavaInterpreter 23 Applet-Abarbeitung: Ereignis class TempApplet extends Applet ... { init() actionPerformed(ActionEvent e) } 1. Ereignis: Enter-Taste u.a. 2. Hardware: registriert Ereignis 3. ... meldet Ereignis an Betriebssystem 4. Betriebssystem: meldet Ereignis dem Java–Interpreter JavaInterpreter - erzeugt Ereignis-Objekt e - ruft auf: actionPerformed(e) K. Bothe, Inst. f. Informatik, HU Berlin, PI1, WS 2006/07 24 Wie wichtig sind Applets? Bell, Parr: Java for Students, Prentice Hall: "Because we see the Internet as being tremendously important, we focus on applets here. In addition, applets are simple to construct for the beginners. How to write applications, we explain in one of the last chapters of this book" (3rd edition, 2002) “In this book we concentrate on applications, because we believe that this is the main way in which Java is being used. We explain how to run applets in the appendix" (4th edition, 2005) K. Bothe, Inst. f. Informatik, HU Berlin, PI1, WS 2006/07 25