Schwerpunkte • Anwendungen und Applets 14. Applets • Erstes Applet-Programm: Temperaturberechnung Java-Beispiel: TempApplet.java TempApplet.html K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 Version: 27. Jan. 2016 2 Java-Applets durch Web-Browser starten? Zwei Arten von Java–Programmen Î Hypertext Markup Language HTML zur Beschreibung von Webseiten erweitern • Applikationen / Anwendungen: Im Detail: Æ Kompilierte Java-Programme (Hallo.class) in Web-Seiten einbinden (analog wie Bilder, Links, Videos …) Direkte Ausführung mit dem Java-Interpreter (java Temperature) Æ Web-Browser kennt Java-Interpreter: ruft ihn auf bisher Æ Java-Applets können über das Netz geladen und direkt vom Browser ausgeführt werden (.class-Programme - nicht .java-Quellen) • Applets: Start mit Hilfe eines Web-Browsers (Firefox, Microsoft Internet Explorer) Æ Applets laufen in graphischer Oberfläche der Web-Seite (z.B. Firefox-Oberfläche) neu K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 3 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 4 HTML-Dokumente: Bestandteile Beispiel: TempApplet.html • Text (mit Hervorhebungen: Farben, Unterstrich, Dicke, Größe) <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> • 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, Institut für Informatik, HU Berlin, GdP, WS 2015/16 5 Firefox: TempApplet.html geladen K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 6 Firefox: TempApplet.html geladen Wirkung des Applet <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> Wirkung des Applet K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 7 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 8 Applet-Beispiel: TempApplet.java Appletviewer: aktiviert Applets direkt > appletviewer TempApplet.html 3 Pakete import java.awt.*; import java.applet.*; import java.awt.event.*; Applet testen - nicht gleich im Browser das gesamte HTML-File Mehrfachvererbung // Respond to Action Event: // typing in the tFahr TextField public void actionPerformed (ActionEvent e) { public class TempApplet extends Applet implements ActionListener { 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"); // Convert from Fahrenheit to Centigrade TextField tFahr; Label lCent; 2 Dialogelemente 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"); } } // Lay out the three Components add(new Label("Please type the temperature (deg F): ")); add(tFahr); add(lCent); 2 Methoden // Register the Component Listener tFahr.addActionListener(this); } K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 9 Vergleich: Applikation - Applet Applikation K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 Programmentwicklung: Anwendungen Editor Applet Temperature File: Hello.java (Quellprogramm) TempApplet main() init() 10 class Hello ... } { Start des Applet durch init() Compiler actionPerformed() File: Hello.class (Objektprogramm) 0 3 getstatic ... ldc ... Ausgabe: JavaInterpeter K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 11 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 Hello ! 12 Programmentwicklung: Applets Erklärung zum Temperatur-Applet Editor TempApplet.java 1. Importe 2. API-Struktur: API - Pakete - Klassen HTML: 3. Klasse Applet <applet CODE="TempApplet.class" . . . </applet> 4. Initialisierung des Fensters Compiler 5. Reaktion auf Ereignisse TempApplet.class Abarbeitung: JavaInterpreter 6. globale und lokale Variablen Web-Browser Wirkung: Webseiten-Oberfläche K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 13 Importe drei Dienste benötigt: import java.awt.*; K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 14 Organisation des Java–API Programmierung der graphischen Benutzeroberfläche (awt = abstract windowing toolkit) import java.applet.*; Java - API java.applet java.awt java.awt.event ... java.lang Applet-Klasse u. a. import java.awt.event.*; Textfield import java.awt.*; import java.applet.*; import java.awt.event.*; public class TempApplet extends Applet implements ActionListener { Label Pakete: Sammlung von Klassen Ereignisbehandlung // Convert from Fahrenheit to Centigrade TextField tFahr; Label lCent; ... Klassen: Softwarekomponenten Paket-Name (z. B. java.awt.event) spiegelt Directory-Namen wider: Æ /java/awt/event public void init() { ...} public void actionPerformed (...){...} } K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 Button 15 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 16 API: Applets API-Klasse ‚Applet' (Anzahl der Methoden) An applet is a small program that is intended not to be run on its own, but rather to be embedded inside another application. Applet: Java-Programm, das von einem Web-Browser gestartet wird Object The Applet class must be the superclass of any applet that is to be embedded in a Web page or viewed by the Java Applet viewer. 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; void init() nicht nur 2 Methoden Called by the browser or applet viewer to inform this applet that it has been loaded into the system. public void init() {...} public void actionPerformed (...) ... Applet (>20) } K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 17 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 Klasse Applet: Methodenaufrufe 18 Initialisierung des Fensters Applet-Fenster auf Bildschirm ausgeben (Anfangszustand) public void init ( ) { TempApplet Start des Programms: analog: main() bei Applikationen 1. Erzeugt (noch unsichtbar): - aktives Textfeld (Eingabe) - Label-Textfeld (Ausgabetext) tFahr = new Textfield (10); lCent = new Label (" I’ll tell...); Woher kommt add()? init() actionPerformed() Oberklasse „Container“ (damit Instanzmethode von } TempApplet) Reaktion auf Enter-Taste (Ereignis): - Temperatur-Feld eingelesen - umgerechneter Wert ausgegeben 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 angeboten z. B.: Textfield, Button, Label, Checkbox, Scrollbar ... K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 19 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 20 Reaktion auf Ereignisse (Event) - Enter-Taste - Wirkung von TempApplet > appletviewer TempApplet.html public void actionPerformed (...) { Nach init(): Label-Textfeld (Ausgabetext) double fahr = 0.0; double cent = 0.0; Einlesen aus Textfeld tFahr und Transformation nach Integer Aktives Textfeld (Eingabe) fahr = Integer.parseInt(tFahr.getText()); Label-Textfeld (Ausgabetext) cent = 5.0 * (fahr - 32) / 9.0; Nach actionPerformed(e): Ausgabe des Resultats in das Labelfeld lCent lCent.setText ( fahr + " deg F is " + cent + " deg C "); } GUI: als ADT/Objekte aufgefasst K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 21 Ereignisbehandlung: Woher kommt actionPerformed()? zusammengesetzte Zeichenkette K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 22 API-Interface „ActionListener“ import java.awt.event.*; The listener interface for receiving action events. The class that is interested in processing an action event implements this interface, and the object created with that class is registered with a component, using the component's addActionListener method. When the action event occurs, that object's actionPerformed method is invoked. Ereignisbehandlung import java.awt.*; import java.applet.*; import java.awt.event.*; public class TempApplet extends Applet implements ActionListener { // Convert from Fahrenheit to Centigrade TextField tFahr; Label lCent; public void init() { ...} public void actionPerformed (...){...} } K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 23 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 24 Objekt der Klasse TempApplet: Aufruf der Methoden Globale Variablen der Klasse public class TempApplet ... { Java-Interpreter global: - sichtbar in gesamter Klasse - Lebensdauer = "gesamte" Zeit TextField tFahr ; Label LCent ; bei Ereignis (Enter-Taste) public void init ( ) { ... add (tFahr); add(lCent); } zum Start TempApplet actionPerformed (ActionEvent e) lesen public void actionPerformed (...) { double fahr = 0.0; double cent = 0.0; init () schreiben initialisieren fahr = Integer.parseInt (tFahr.gettext()); tFahr 100 lCent 100 deg is 37.7 deg C } } K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 25 Applet-Abarbeitung: Start class TempApplet extends Applet ... { init() actionPerformed(...) } Web-Browser: Internet Explorer o.a. 4. Wirkung: Dialogelemente tFahr, lCent auf Bildschirm class TempApplet extends Applet ... { init() actionPerformed(ActionEvent e) } 1. Ereignis: Enter-Taste u.a. 2. Hardware: registriert Ereignis 3. ... meldet Ereignis an Betriebssystem 3. ruft auf 2. ruft auf 26 Applet-Abarbeitung: Ereignis TempApplet.html: <applet ... "TempApplet.class" ...> 1. liest K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 4. Betriebssystem: meldet Ereignis dem Java–Interpreter JavaInterpreter JavaInterpreter - erzeugt Ereignis-Objekt e Æ genauer: Kapitel III.15 - ruft auf: actionPerformed(e) K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 27 K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 28 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, Institut für Informatik, HU Berlin, GdP, WS 2015/16 29