Einführung in Java, Teil 5

Ähnliche Dokumente
Grundlagen der Informatik für Ingenieure I

Ereignisverwaltung und Layout-Typen

Grundlagen der Informatik für Ingenieure I

Grundlagen der Informatik für Ingenieure I

Einstieg in die Informatik mit Java

Grundlagen der Informatik für Ingenieure I

Programmieren II. Java-Applets. Heusch 17 Ratz 4. Institut für Angewandte Informatik

Einstieg in die Informatik mit Java

Grafikprogrammierung mit Java Teil 1/2

Softwaretechnik (Medieninformatik): GUIs mit Swing Überblick

Objektorientierte Programmierung OOP Objektorientierte Programmierung (OOP) mit Java

11. GUI-Programmierung mit SWING Überblick

Applets. Applets. Applets. Applet: Java-Programm Eingebettet in einer HTML-Seite Ausführung von einem Java-fähigen Web-Browser oder sog.

Programmieren II. Zeichnen in Swing-Komponenten. Heusch 18 Ratz Institut für Angewandte Informatik

Konzepte objektorientierter Programmierung

Grundlagen der Informatik für Ingenieure I

Tag 9: Grafische Benutzeroberflächen

Eventhandling. Delegation model Eventhandler model

Praktikum 4: Grafiken und Ereignisse

Java - AWT Basispraktikum SystemArchitektur WS 2008/ Atanas Dimitrov

I. Grundlagen II. Ereignistypen III. Ereignisempfänger. Event-Handling (EH)

Grundlagen der Informatik für Ingenieure I

Ist eine Softwarekomponente, die dem Benutzer eines Computers die Interaktion mit der Maschine über grafische Symbole erlaubt

Grundlagen der Informatik für Ingenieure I

Einführung in die Informatik - Teil 4b - Zeichnen mit der Maus im JBuilder

Appletprogrammierung

Auswahl aus mehreren Alternativen:

Eventhandling. Delegation model Eventhandler model

Universität Karlsruhe (TH)

Kapitel X - Zeichnen mit Java2D

Was passiert, wenn Button "Ok?" mit Maus angeklickt?

Benutzeroberflächen. Abstract Windowing Toolkit, Rahmen, Wächter, Ereignisbehandlung, Ausgabe, Menüs.

Graphische Nutzerschnittstellen

Aufgabe Malen zum Software-Engineering. Karl Friedrich Gebhardt

Applets Pro r g o r g a r m a mier e e r n e n mit Jav a a Einf n üh ü r h u r n u g n g in n App p l p et e s Ya Y na N o N rina

Projekt objektorientiertes programmieren in Java SS08. Event-Handling. Nils Heinrich

Graphische Nutzerschnittstellen

<a href="basic.java">the source.</a>

Softwareentwicklung Applets und Graphik

Universität Paderborn Prof. Dr. Stefan Böttcher. Abschluss von Kapitel 2: Programmierung Grafischer Oberflächen mit der Swing-Bibliothek

Kapitel 7: Ereignis-basierte Kommunikation

Applets und HTML. Martin Wirsing. Exkurs: Noch einmal Object. in Zusammenarbeit mit Matthias Hölzl, Nora Koch

import java.applet.applet; import java.awt.*; public class Grow extends Applet { public void start() { setbackground(color.orange); } public void

8.6 Visualisierung der Sortieralgorithmen

5 Hausaufgabe Java Applets

Dr. Monika Meiler. Inhalt

Softwaretechnik (Medieninformatik): GUIs mit Swing Überblick

Dr. Monika Meiler. Inhalt

15. Ereignisse (Events)

Wiederholung JAVA. 1. (Vorbereitung)

24. Textausgabe in Java. Vorgetragen von Rüdiger Heidenreich

Grafikausgabe mit dem Abstract- Windowing-Toolkit. Eine Einführung

Institut für Programmierung und Reaktive Systeme. GUIs mit Swing. Markus Reschke

2. Visualisierung von mathematischen Objekten und Prozessen

Grundlagen der Programmierung (GP) Prof. Dr. H. Schlingloff Joachim Hänsel

Applets Belebung von Webseiten. Dipl.-Ing. Wolfgang Beer

Einführung in die OOP mit Java

Kurs: Programmieren in Java

Ab jetzt: Java ohne Kara

Grafik in Java. 1 Werkzeugauswahl. 2 Ereignisbehandlung (Listener bzw. Adapter) - 1 -

Graphische Benutzungsoberflächen

Universität Augsburg, Institut für Informatik Sommersemester 2001 Prof. Dr. Martin Ester 08. Oktober Klausur II

Ereignisverarbeitung in Java

11. GUI-Programmierung mit SWING Überblick

16 Zeichnen in Swing-Komponenten , Prof. Dr. D. Ratz

V by WBR1/BFH-TI 2011 by MOU2/BFH-TI

Abstrakte Klassen und Schnittstellen. Abstrakte Klassen und Schnittstellen. Abstrakte Klassen und Schnittstellen. Vererbung von abstrakten Methoden

public class Beispiel1 extends Frame {

Einführung in die Programmierung für NF. Übung 08

Aufbau einer typischen Java-Datei

EAD II Übung 5. Graphische Benutzungsoberfläche mit BlueJ

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 7. Grafische Benutzeroberflächen 1

GUI Programmierung in Java

Drucken. Programmieren II. Martin Schultheiß. Hochschule Darmstadt Sommersemester 2011

Ereignisse Graphikausgabe in AWT und Swing

13 Applets Applets. Parameter Kommunikation mit dem Browser

Objektorientierte Software-Entwicklung

Aufgabe 5.1 (Laboraufgabe, Nocheinmal ein wenig Graphik)

Universität Paderborn Prof. Dr. Stefan Böttcher. Kapitel 3: Java Applets

Beispiel: Eine Choice-Liste...

GUI Programmierung mit JAVA Swing

Wiederholung. Klassenhierarchie:

Programmieren 2 Selbststudium Semesterwoche 4

Workshop zu Folge 9.3 Überarbeitete Version vom Mai 2016

Zeichnen und animieren

JAVA 3. Arbeitsblätter für die Lehrveranstaltung OOP. III. Applets und JavaScript. Das Applet-Tag:

Java Game Development Fabian Birzele Programmierpraktikum 2008 / 2009

Der Ball kann angezeigt werden: anzeigen( ) {... } Der Ball kann z.b. seine Größe verändern: groesseaendern(int veraenderung) {... } usw.

Design Patterns I. Observer, Listener & MVC

Grafische Benutzeroberfläche mit Java-Applets

Zugriffsrechte und Packages

Grundlagen der Programmierung APPLETS

Grundlagen der Informatik für Ingenieure I

Schablonen für Klassen, Interfaces oder Methoden, die noch nicht festgelegte Datentypen verwenden

Transkript:

Universität Stuttgart Institut für Automatisierungs- und Softwaretechnik Prof. Dr.-Ing. Dr. h. c. P. Göhner Einführung in Java, Teil 5 Angepasst auf JApplet von Daniel Huson Vorlesung Informatik I, 1.12.2005 2000, IAS 1

Überblick Teil 5: JApplet-Grundlagen 2000, IAS 2

JApplet vs Applet und Swing vs AWT In alte Versionen von Java wurde die AWT (Abstract Window Toolkit) benutzt, um GUIs zu implementieren. Applets wurden durch Erweiterung der alten java.applet.applet Klasse geschrieben. Heute benutzt man nach Möglichkeit nur noch die Swing Bibiliothek, um GUIs zu implementieren. Das Package javax.swing ist eine Erweiterung von java.awt. Für die meisten Klassen in AWT gibt es eine Ersatzklasse in Swing, und die Klassennamen unterscheiden sich in der Regel durch ein J: z.b. Label (in AWT) und JLabel (Swing) Applets werden heute durch Erweiterung der Klasse javax.swing.japplet geschrieben und bauen auf der Swing Bibliothek auf 2000, IAS 3

Applet contra Applikation Applikation eigenständiges Programm keine Beschränkungen Applet Einbettung in HTML-Seite, Ausführung im Browser kein Zugriff auf Client-Dateisystem keine Kommunikation mit anderen Netzwerk-Servern keine Ausführung anderer Programme auf dem Client-System Sandbox Applikation und Applet sind nicht unvereinbar - ein Java- Programm kann gleichzeitig Applikation und Applet sein 2000, IAS 4

Applets im Browser starten Applets laufen in Webbrowser Nehmen wir an, Sie haben in der Datei FirstApplet.java ein JApplet programmiert und die kompilierte Datei heisst FirstApplet.class Dieses Applet wird gestartet, wenn Sie in einem Webbrowser eine HTML Seite laden, die sich im selben Verzeichnis befindet und folgende Zeilen enthält: <applet code=firstapplet width=400 height=300> </applet> Das Applet wird gestartet und mit der angegeben Größe (400x300) angezeigt. 2000, IAS 5

Applet-Erstellung Applets sind immer eine Subklasse von javax.swing.japplet die JApplet Superklasse ist Teil der Swing-Hierarchie, d.h. Applets können auf graphische Oberflächenelemente und Ereignisbehandlung zurückgreifen public class MeinApplet extends javax.swing.japplet {... Applets benötigen keine main()-methode die Applet-Klasse muss public deklariert werden, alle anderen Sub- und Hilfsklassen können beliebige Zugriffsrechte vereinbaren 2000, IAS 6

Applet-Methoden (1) der Lebenszyklus eines Applets besteht aus verschiedenen Aktivitäten, die jeweils durch eine eigene Methode repräsentiert sind: Initialisieren, Starten, Stoppen, Zerstören und Anzeigen Initialisieren Vorgang, bei dem das Applet geladen wird definiert grundlegendes Aussehen/Verhalten (z.b. Lesen von Parametern, Erstellen von Hilfsobjekten, Laden von Bildern) init()-methode: public void init() {... // Initialisierungaktivitaeten 2000, IAS 7

Applet-Methoden (2) Starten erfolgt nach der Initialisierung jedes Applet wird nur einmal initialisiert, kann jedoch mehrfach gestartet werden start()-methode: public void start() {... Stoppen Vorgang, wenn Benutzer Seite verlässt oder Applet manuell gestoppt wird stop()-methode: public void stop() {... 2000, IAS 8

Applet-Methoden (3) Zerstören Aufräumen (z.b. Resourcen freigeben), wenn Applet oder Browser beendet wird destroy()-methode public void destroy() {... Zeichnen bestimmt, was und wie auf den Bildschirm gezeichnet wird wird im Applet-Lebenszyklus sehr häufig aufgerufen paint()-methode public void paint(graphics g) {... benötigt Argument: Objekt der Klasse java.awt.graphics 2000, IAS 9

Graphiken (1) Graphikoperationen sind in Java meistens Methoden der java.awt.graphics-klasse jedes Applet verfügt über ein Koodinatensystem die Koordinaten werden in Pixel (Integerwerte) angegeben Ursprung (0,0) X (10,10) (30,20) Y 2000, IAS 10

Graphiken (2) Linien werden mit drawline() gezeichnet: g.drawline( x1, y1, x2, y2 ); Anfangspunkt Endpunkt Rechtecke werden mit drawrect() oder fillrect() gezeichnet: g.drawrect( x1, y1, dx, dy ); Ausdehnung Polygone werden mit drawpolygon() oder fillpolygon() gezeichnet: int x[] = { x1, x2, x3, x4 ; int y[] = { y1, y2, y3, y4 ; int punkte = x.length; g.drawpolygon( x, y, punkte ); 2000, IAS 11

Graphiken (3) Polygone werden automatisch geschlossen. Für offene Polygone steht die Methode drawpolyline() zur Verfügung: int x[] = { x1, x2, x3, x4 ; int y[] = { y1, y2, y3, y4 ; int punkte = x.length; g.drawpolyline( x, y, punkte ); Ovale werden mit drawoval() oder filloval() gezeichnet: g.drawoval( x1, y1, dx, dy ); Bögen werden mit drawarc() oder fillarc() gezeichnet: g.drawarc( x1, y1, dx, dy, start, grad ); umgebendes Rechteck Startwinkel überstrichener Winkel + - 2000, IAS 12

Graphiken (4) mit copyarea() wird ein rechteckiger Bereich in eine andere Position (transx, transy) kopiert g.copyarea( x1, y1, dx, dy, transx, transy ); mit clearrect() wird ein Bereich auf die aktuelle Hintergrundfarbe gesetzt g.clearrect( x1, y1, dx, dy ); mit Hilfe der size()-methode wird das gesamte Applet gelöscht g.clearrect( 0, 0, size().width, size().height ); 2000, IAS 13

Graphiken (5) Beispiel: // Graphik-Beispiel import java.awt.*; public class Grafik extends javax.swing.japplet { public void paint( Graphics g ) { g.drawline(80, 20, 80, 140); g.drawline(20, 80, 140, 80); g.drawrect(40, 70, 20, 20); g.drawrect(100, 70, 20, 20); g.filloval(70, 70, 20, 20); g.drawoval(50, 50, 60, 60); g.drawarc(20, 20, 120, 120, 90, 90); g.drawarc(20, 20, 120, 120, 0, -90); 2000, IAS 14

Graphiken (6) Beispiel (Forts.): 2000, IAS 15

Text & Schrift (1) im Zusammenhang mit Text und Schriften sind zwei Klassen wichtig: java.awt.font bestimmt Schriftart, Stil, Punktgröße java.awt.fontmetrics zusätzliche Informationen über die aktuelle Schriftart neue Schriften werden vor der Benutzung instanziiert: Font f = new Font( TimesRoman, Font.BOLD, 24); Schriftart Fontstil Schriftgröße Courier Font.PLAIN (in Punkten) Helvetica Font.ITALIC prinzipiell können alle auf einem System installierten Schriften verwendet werden, Standardschriften sind jedoch vorzuziehen 2000, IAS 16

Text & Schrift (2) mit drawstring() bzw. drawchar() werden einzelne Strings und Zeichen ausgegeben Beispiel: public void paint( Graphics g ) { Font f = new Font( TimesRoman, Font.BOLD, 32); g.setfont(f); g.drawstring( Java ist schön, 40, 40); die Klasse FontMetrics liefert spezifische Informationen über die aktuelle Schriftart stringwidth(string): volle Breite des Strings in Pixel charwidth(): Breite eines bestimmten Zeichens getleading(): Freiraum zwischen zwei Zeilen getheight(): Gesamthöhe der Schriftart 2000, IAS 17

Text & Schrift (3) Beispiel // Zentrieren eines Strings im Applet import java.awt.*; public class Zentriert extends javax.swing.japplet { public void paint( Graphics g ) { Font f = new Font( TimesRoman, Font.PLAIN, 32); FontMetrics fm = getfontmetrics(f); g.setfont(f); String s = Java im Zentrum! ; int xstart = (getsize().width - fm.stringwidth(s))/2; int ystart = getsize().height / 2; g.drawstring( s, xstart, ystart ); 2000, IAS 18

Farben (1) Java Farbmodell die Klasse java.awt.color bietet Unterstützung bei der Arbeit mit Farben das Farbmodell in Java verwendet 24-Bit-Farben, wobei jede Farbe eine Kombination aus Rot-, Grün- und Blauwerten ist, z.b. Weiß: (255, 255, 255) Blau: (0, 0, 255) das Farbmodell wird auf die Systemmöglichkeiten abgebildet zur Arbeitserleichterung ist ein Set von Standardfarben vordefiniert: Color.white Color.black... eigene Farben können jederzeit definiert werden: Color meinefarbe = new Color( 7, 242, 128 ); 2000, IAS 19

Farben (2) Farben verwenden eine neue Farbe wird vor der Benutzung für Text/Zeichnungen eingerichtet g.setcolor( Color.green ); die Hinter- und Vordergrundfarbe für ein Applet kann eingestellt werden setbackground( Color.green ); setforeground( Color.white ); mit entsprechenden get-methoden kann die aktuelle Farbe sowie die Hinter- und Vordergrundfarbe abgefragt werden getbackground(); getforeground(); 2000, IAS 20

Bilder (1) mit den Methoden der Klasse java.awt.image können Bilder geladen und in einem Applet angezeigt werden Bilder laden mit getimage() wird ein Bild als Image-Objekt geladen Image img = getimage( new URL( http://www.serv.de/files/imi01.gif )); um absolute Pfadangaben zu vermeiden kann getdocumentbase() oder getcodebase() verwendet werden Image img = getimage( getdocumentbase(), files/imi01.gif ); Java unterstützt z. Zt. nur Bilder im GIF oder JPEG Format 2000, IAS 21

Bilder (2) Bilder zeichnen die Ausgabe des Bildes im Applet erfolgt mit der drawimage()-methode g.drawimage( img, 20, 20, this ); Bildpunkt links oben durch zusätzliche Angabe einer gewünschten Breite und Höhe nach der Angabe des linken oberen Bildpunktes kann eine Skalierung/Verzerrung erreicht werden die Orginaldimension des Bildes wird mit getwidth() und getheight() ermittelt int bildbreite = img.getwidth(this); int bildhoehe = img.getheight(this); 2000, IAS 22

Bilder (3) Beispiel: // Text und Bilder import java.awt.*; public class IASJava extends javax.swing.japplet { Image logo; public void init() { logo = getimage( getcodebase(), "ias.gif"); setbackground( Color.white ); public void paint( Graphics g ) { g.setcolor( Color.red ); Font f = new Font( "TimesRoman", Font.BOLD, 36 ); g.setfont(f); g.drawstring( "Java am IAS", 20, 40 ); int iwidth = logo.getwidth( this ); int iheight = logo.getheight( this ); g.drawimage( logo, 40, 60, iwidth, iheight, this ); 2000, IAS 23

Bilder (4) Beispiel (Forts.) 2000, IAS 24

Ereignisse & Interaktivität (1) Ereignisse sind eine wichtige Kommunikationsform in der Computerwelt für Java-Programme sind Ereignisse interessant, die vom Benutzer oder System verursacht werden: Mausklicks Mausbewegungen Tastaturanschläge Ereignisse der Benutzeroberfläche Fensterereignisse Java unterstützt z.zt. in der AWT zwei verschiedene Ereignismodelle: JDK 1.02 seit JDK 1.1 Event-Listener-Konzept 2000, IAS 25

Ereignisse & Interaktivität (2) ab JDK 1.1 Applet Fensterereignis init()... initialize applet... register mouse listener... initialize button... register buttonaction listener Registriert mouse listener Registriert actions listener Mausereignis Tastenereignis Schaltflächenereignis 2000, IAS 26

JDK 1.1 - Ereignismodell (1) Das Verwenden von Ereignissen in einem Applet erfolgt nach festgelegten Spielregeln: Schritt 1: entscheiden, welche Ereignisse für das Applet wichtig sind und zugehörige Listener-Typen herausfinden Schritt 2: Code für diese Listener und die Ereignisverarbeitung erstellen Schritt 3: Listener mit Applet registrieren 2000, IAS 27

JDK 1.1 - Ereignismodell (2) Schritt 1: Ereignisse und Listener-Schnittstellen die API-Dokumentation gibt Auskunft über Ereignisse und ihre zugehörigen Listener-Schnittstellen Listener-Interface Ereignis Definition (alle public void) MouseListener mousedown mousepressed (MouseEvent e) mouseup mousereleased (MouseEvent e) mouseenter mouseentered (MouseEvent e) mouseexit mouseexited (MouseEvent e) mouseclicks mouseclicked (MouseEvent e) MouseMotion- mousemove mousemoved (MouseEvent e) Listener mousedrag mousedragged (MouseEvent e) KeyListener keyup keyreleased (KeyEvent e) keydown keypressed (KeyEvent e) keytyped keytyped (KeyEvent e) 2000, IAS 28

JDK 1.1 - Ereignismodell (3) Schritt 2: Listener-Schnittstellen implementieren der Ereignis-Listener ist eine Klasse, die die Listener- Schnittstelle implementiert Schnittstellen-Implementierung kann auf zwei Arten erfolgen: (A) separate Listener-Klasse: elegante Lösung für größere Programme zu (A): (B) Listener wird direkt in der Applet-Klasse implementiert: schnelle Lösung für kleinere Applets separate Listener-Klasse muss Schnittstelle vollständig implementieren für viele Listener stehen in java.awt.event sog. Adapterklassen mit Default-Implementierungen zur Verfügung, z.b.: MouseAdapter für MouseListener MouseMotionAdapter für MouseMotionListener KeyAdapter für KeyListener 2000, IAS 29

JDK 1.1 - Ereignismodell (4) Schritt 2 (Forts.): Listener-Schnittstellen implementieren zu (A): von den Listener-Adapterklassen werden eigene Listener- Klassen abgeleitet, welche die relevanten Ereignisbehandlungs-Methoden (z.b. mousepressed()) überschreiben import java.awt.event.*; class MeinMausListener extends MouseAdapter { public void mousepressed( MouseEvent e ) {... 2000, IAS 30

JDK 1.1 - Ereignismodell (5) Schritt 2 (Forts.): Listener-Schnittstellen implementieren zu (B): das Applet ist sein eigener Event-Listener: import java.awt.event.*; public class MeinApplet extends javax.swing.japplet implements MouseListener, KeyListener { // Ereignisbehandlung public void mousepressed( MouseEvent e ) {... // Leer-Implementierungen der Schnittstelle public void mousereleased( MouseEvent e ) {... Wichtig: gesamte Schnittstelle muss implementiert werden 2000, IAS 31

JDK 1.1 - Ereignismodell (6) Schritt 3: Listener registrieren Verbindung zwischen Listener und Applet mit Registrierungsmethoden herstellen: addmouselistener(); addmousemotionlistener(); addkeylistener(); für separate Listener-Klasse m1 = new MeinMausListener(); addmouselistener( m1 ); Applet ist Listener addmouselistener( this ); 2000, IAS 32

Mausereignisse (1) Beispiel: folgendes Applet zeichnet gerade Linien auf den Bildschirm durch Ziehen der Maus vom Anfangs- zum Endpunkt. Es können maximal 10 Linien gezeichnet werden. // Linien.java import java.awt.*; import java.awt.event.*; public class Linien extends javax.swing.japplet implements MouseListener, MouseMotionListener { final int MAXLINES = 10; Point starts[] = new Point[MAXLINES]; // Startpunkte Point ends[] = new Point[MAXLINES]; // Endpunkte Point anchor; // Start aktuelle Linie Point currentpoint; // Ende aktuelle Linie int currline = 0; // Anzahl Linien 2000, IAS 33

Mausereignisse (2) Beispiel (Forts.) public void init() { setbackground( Color.white ); // Event-Listener registrieren addmouselistener( this ); addmousemotionlistener( this ); // Leerimplementierungen der Schnittstellen public void mousemoved( MouseEvent e) { public void mouseclicked( MouseEvent e) { public void mouseentered( MouseEvent e) { public void mouseexited( MouseEvent e) { public void mousepressed( MouseEvent e ) { if( currline < MAXLINES ) anchor = new Point( e.getx(), e.gety() ); else System.out.println( "Too many lines..." ); 2000, IAS 34

Mausereignisse (3) Beispiel (Forts.) public void mousereleased( MouseEvent e ) { if( currline < MAXLINES ) addline( e.getx(), e.gety() ); public void mousedragged( MouseEvent e ) { if( currline < MAXLINES ) { currentpoint = new Point( e.getx(), e.gety() ); repaint(); void addline( int x, int y ) { starts[currline] = anchor; ends[currline] = new Point(x, y); currline++; currentpoint = null; anchor = null; repaint(); 2000, IAS 35

Mausereignisse (4) Beispiel (Forts.) public void paint( Graphics g ) { super.paint(g); for ( int i = 0; i < currline; i++ ) { g.drawline( starts[i].x, starts[i].y, ends[i].x, ends[i].y ); g.setcolor( Color.blue ); if( currentpoint!= null ) g.drawline( anchor.x, anchor.y, currentpoint.x, currentpoint.y); // Linien-Applet Ende 2000, IAS 36

Mausereignisse (5) Beispiel (Forts.) 2000, IAS 37

Zusammenfassung Unterschied Applet Applikation AWT vs Swing Applet-Aktivitäten: Initialisieren, Starten, Stoppen, Zerstören, Anzeigen einfache Graphikoperationen: Linien, Rechtecke,... Umgang mit Schriften Applet-Farben Bilder in Applets Ereignisbehandlung in Java 2000, IAS 38