5. Das Java AWT (II) Components und Container



Ähnliche Dokumente
GUI-Programmierung mit Java. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 11: GUI 1: AWT (1) GUI-Programmierung mit Java.

Programmieren II. Java im Vergleich zu anderen Sprachen. Einführung: GUI. Einführung: Grafische Benutzeroberflächen. Dr.

GUI Programmierung mit javax.swing

GUI-Programmierung. Teil I. Unterlagen zum Modul OOP mit Java V by MOU2/BFH-TI. Berner Fachhochschule Technik und Informatik

Objektorientierte Software-Entwicklung

Zentrale Objekte zur Programmierung graphischer Benutzeroberflächen (GUI)

Graphische Benutzungsoberflächen

Layout Manager. Astrid Beck FHT Esslingen

Einführung: Grafische Benutzeroberflächen. Programmieren II. Dr. Klaus Höppner. Hochschule Darmstadt Sommersemester / 22

Fenster in Java. von Stefanie Gerckens 1

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

GroupLayout Anmerkung

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Session 1: Classes and Applets

GUI Programmierung mit JAVA Swing

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

Einführung in GUI-Programmierung. javax.swing

Javakurs für Fortgeschrittene

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik GUI-Programmierung mit Swing

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

12 Abstrakte Klassen, finale Klassen und Interfaces

Funktionale und Objekt-Orientierte Programmierkonzepte

Wiederholung. Klassenhierarchie:

...erinnern Sie sich? oopjs4b / kwhbkd4r

Ziel dieses Kapitels: Einführung in die Grundzüge der Programmierung graphischer Benutzeroberflächen (engl.: "graphical user interface", GUI) in Java

Einstieg in die Informatik mit Java

14 Abstrakte Klassen, finale Klassen, Interfaces

14 Abstrakte Klassen, finale Klassen, Interfaces. Auswertung von Ausdrücken. Beispiel. Abstrakte Methoden und Klassen

Grundlagen der Informatik für Ingenieure I. 8. AWT - Abstract Window Toolkit Teil 1

14 Abstrakte Klassen, finale Klassen, Interfaces

IT I: Heute. abstrakte Methoden und Klassen. Interfaces. Interfaces List, Set und Collection IT I - VO 7 1

Java. Von den Grundlagen bis zu Threads und Netzen von Prof. Dr. Ernst-Wolfgang Dieterich Fachhochschule Ulm

1 Abstrakte Klassen, finale Klassen und Interfaces

Graphische Programmierung: GUIs: graphical user interfaces

(C) Sortieren und Suchen mit Java.-AWT Seite 1

Innere Klassen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

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

4. Hierarchische Datenstrukturen in OO-Systemen

Java I Vorlesung 11 Graphische Oberflächen mit Swing

Probeklausur: Programmierung WS04/05

Einstieg in die Informatik mit Java

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

Programmieren 2 Selbststudium Semesterwoche 4

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

Swing. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

Objektorientierte Programmierung Studiengang Medieninformatik

Exkurs: ANONYME KLASSEN. Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm

Handbuch für die Erweiterbarkeit

NTB Druckdatum:

Theorie zu Übung 8 Implementierung in Java

Programmiertechnik GUI Programmierung mit Java Swing

Hochschule der Medien Prof. Uwe Schulz 14. Juli 2010 Klausur Informatik, EDV-Nr Seite 1 von 5. Teil 2: Aufgaben

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke

Javakurs für Anfänger

Objektorientierte Programmierung

Info B VL 11: Innere Klassen/Collections

Java Programmierhandbuch

Ein Manager mit CardLayout layout/cards.java

Einstieg in die Informatik mit Java

11. GUI-Programmierung mit SWING Überblick

Informatik II Übung 06. Benjamin Hepp 5 April 2017

Java - AWT Basispraktikum SystemArchitektur WS 2008/ Atanas Dimitrov

Einführung in GUI-Programmierung. javax.swing

Grafische Benutzeroberflächen

Transkript:

5. Das Java AWT (II) Components und Container OO-Graphics in Java Das Java AWT (II) 111

AWT Hierarchie (II) Checkbox Choice Object List Button Component Canvas Panel Applet Container ScrollPane Dialog FileDialog Label Window Frame Scrollbar TextArea TextComponent TextField instantiierbares Objekt nicht instantiierbares abstraktes Objekt OO-Graphics in Java Das Java AWT (II) 112

Wichtige Klassen des AWT (II) Component: Die Basisklasse Definiert sehr viele Methoden. Kann nicht direkt instanziiert werden! Canvas: Die einfachste Zeichenoberfläche (Leinwand) Besitzt im wesentlichen ein Graphics-Objekt. Container: Ein Behälter für Components Kann nicht direkt instanziiert werden! Panel: Objekt zum Zusammenfassen grösserer Sinneinheiten in einem Container. Applet ist als Unterklasse von Panel definiert. Window: einfaches Fensterobjekt (Dialog) Wird als Popup-Window verwendet. Frame: richtiges Fensterobjekt Hat Titelbalken, kann vom User verkleinert und vergrössert werden, kann ein Menu haben... OO-Graphics in Java Das Java AWT (II) 113

Wichtige Klassen des AWT (III) Button: Druckknopf Checkbox: Ankreuzfeld Choice: Auswahlmenu (Pull-down) List: Auswahlmenu Label: statischer Text Scrollbar: Schieberegler TextField: Texteingabe (einzeilig) TextArea: Texteingabefeld (mit mehreren Zeilen) OO-Graphics in Java Das Java AWT (II) 114

Components Components sind der Grundbaustein einer graphischen Benutzeroberfläche. Merke: Alles, was man sieht, ist ein Component Components haben unzählige Methoden, welche wir zunächst alle nicht benötigen. Merke: Im Zweifel ist die gesuchte Methode in Component definiert. Schon bekannt: Die paint(graphics g)-methode: Wird in Unterklassen überschrieben, um individuelle Graphiken zu zeichnen. OO-Graphics in Java Das Java AWT (II) 115

Components: Button, Checkbox, Choice import java.applet.*; import java.awt.*; public class ComponentTest1 extends Applet { private Button button; private Checkbox checkbox; private Choice choice; public void init() { button = new Button("Press me"); this.add(button); checkbox = new Checkbox("Check me"); this.add(checkbox); } } choice = new Choice(); choice.additem("first"); choice.additem("second"); choice.additem("third"); this.add(choice); OO-Graphics in Java Das Java AWT (II) 116

Components: Label, TextField, TextArea import java.applet.*; import java.awt.*; public class ComponentTest2 extends Applet { private Label label; private TextField textfield; private TextArea textarea; public void init() { label = new Label("This is Text"); this.add(label); textfield = new TextField("This is Editable Text",20); this.add(textfield); } } textarea = new TextArea(" This is a\n whole\n Text Area",3,10); this.add(textarea); OO-Graphics in Java Das Java AWT (II) 117

Peers Für alle Bildschirmobjekte werden die vom Windowsystem bereitgestellten, nativen Objekte benutzt (sogenannte Peers). Vorteile: garantiertes Plattform-Look-and-Feel effiziente Implementierung schnell anzupassen Nachteile: garantiertes Plattform-Look-and-Feel Protokollreibereien hoher Systemresourcenverbrauch gemeinsamer Nenner OO-Graphics in Java Das Java AWT (II) 118

Lightweight Peers Mit Java 1.1 wurden sogenannte Lightweight-Peers eingeführt. Die Peers sind dabei vollständig in Java implementiert und direkte Unterklassen von Component. Mit der Einführung der Java Foundation Classes gewinnen Lightweight-Peers an Bedeutung. Für eigene User-Interface-Komponenten mit spezieller Funktionalität bieten sich Lightweight-Peers an. Achtung: Obwohl viele Methoden in Component definiert werden, müssen sie selbst implementiert werden (viele Methoden sind nicht explizit als abstract deklariert, sondern sind es nur implizit). OO-Graphics in Java Das Java AWT (II) 119

Container Objekte in denen mehrere Bildelemente (Components) zusammengefasst werden können Anordung der Bildelemente wird durch das Layout des Containers bestimmt kann nicht selbst instantiiert werden Typische Container sind Panel und Window ermöglichen eine hierarchische Gestaltung der Benutzeroberfläche OO-Graphics in Java Das Java AWT (II) 120

Applets als Container Da die Klasse Applet eine Unterklasse von Panel ist, ist jedes Applet selbst ein Container. Man fügt Komponenten zu einem Container mit der add-methode hinzu, mit remove entfernt man sie wieder: Programmauszug: public class MyApplet extends Applet { //... public void init() { Label l = new Label("Please press:"); add(l); Button b = new Button("Press Me!"); add(b); } //... } OO-Graphics in Java Das Java AWT (II) 121

Fenstergestaltung mit Containern Da Container eine Unterklasse von Component ist, kann ein Container selbst wieder zu einem anderen Container hinzugefügt werden. Damit können ganze Hierarchien von User-Interface-Elementen aufgebaut werden. Panel(BorderLayout) Panel (GridLayout) Knopf 1 Knopf 2 Knopf 3 Knopf 4 Knopf 7 Knopf 5 Knopf 8 Knopf 4 Knopf 9 TextArea Statuszeile Panel (BorderLayout) Panel() Checkbox Checkbox Checkbox Checkbox Checkbox Checkbox Checkbox Checkbox OO-Graphics in Java Das Java AWT (II) 122

Panels import java.applet.*; import java.awt.*; public class ContainerTest1 extends Applet { private Button a,b,c; private TextArea text; private Panel panel1,panel2; public void init() { panel1 = new Panel(); a = new Button("Button A"); b = new Button("Button B"); c = new Button("Button C"); panel1.add(a); panel1.add(b); panel1.add(c); panel2 = new Panel(); text = new TextArea("Text Gebiet",4,30); panel2.add(text); } } this.add(panel1); this.add(panel2); OO-Graphics in Java Das Java AWT (II) 123

Layouts Der LayoutManager steuert das graphische Erscheinungsbild eines Containers jeder Container besitzt einen LayoutManager legt das Verhalten bei resize-operationen fest ermöglicht plattformunabhängige Oberflächengestaltung vordefinierte LayoutManager: FlowLayout, BorderLayout, GridLayout, CardLayout, GridbagLayout LayoutManager ist ein Interface. Man kann selbst neue Klassen schreiben, die LayoutManager implementieren, um eigene Layout-Regeln durchzusetzen. OO-Graphics in Java Das Java AWT (II) 124

Positionierung von Komponenten Die Positionierung von einzelnen Komponenten liegt nicht in der Hand des Programmierers, sondern in der Hand des Layout-Managers. Dieser orientiert sich an Daten, die er von den einzelnen Komponenten erhält. Alle Components implementieren die Methoden public Dimension getminimumsize() public Dimension getpreferredsize() public Dimension getmaximumsize() die der LayoutManager für die Bestimmung der Grösse und Position einzelner Komponenten benutzen kann (aber nicht muss!). Daher macht es keinen Sinn, die Komponenten direkt über Aufrufe von setlocation oder setsize zu positionieren. OO-Graphics in Java Das Java AWT (II) 125

Setzen des LayoutManagers import java.awt.*; import java.applet.*; public class LayoutTest extends Applet { public void init() { setlayout(new FlowLayout()); } Button a = new Button("First"); Button b = new Button("Second"); Button c = new Button("Third"); Button d = new Button("Fourth"); Button e = new Button("Fifth"); add(a); add(b); add(c); add(d); add(e); } Es folgt eine Übersicht über Standard-Layouts. OO-Graphics in Java Das Java AWT (II) 126

FlowLayout FlowLayout ist der Default-LayoutManager für viele Container. Die enthaltenen Komponenten werden auf die Grösse gesetzt, die sie über getpreferredsize() zurückliefern. Dann werden sie zeilenweise angeordnet (vergleichbar mit word-wrap). OO-Graphics in Java Das Java AWT (II) 127

BorderLayout setlayout(new BorderLayout()); Der BorderLayout-Manager teilt den Container in fünf Regionen auf: North, East, West, South und Center. Jede dieser Regionen kann genau eine Komponente enthalten (die aber wieder ein Container sein kann). Um auf eine der Regionen zuzugreifen, übergibt man ihren Namen an add als erstes Argument. OO-Graphics in Java Das Java AWT (II) 128

GridLayout setlayout(new GridLayout(3,2)); Der GridLayout-Manager teilt den vorhandenen Platz gleichmässig auf. Die add-methode weist den Komponenten nacheinander von links nach rechts und oben nach unten je eine Zelle zu. OO-Graphics in Java Das Java AWT (II) 129

Layout-Bemerkungen Jede Komponente kann nur einmal verwendet werden. Fügt man eine Komponente zu mehreren Containern hinzu, so wird sie aus allen bis auf den letzten wieder gelöscht. Dies verhindert zirkuläre Abhängigkeiten. Da für die Bestimmung des Layouts alle mittels add hinzugefügten Komponenten existieren müssen, wird die Berechnung solange hinausgezögert, bis der Container selbst gemalt wird. Mit der Methode validate() erzwingt man, dass das Layout neu berechnet wird. Man kann explizit positionieren, wenn man den LayoutManager eines Containers auf null setzt. Dadurch verliert man Plattformunabhängigkeit! OO-Graphics in Java Das Java AWT (II) 130

Ohne LayoutManager public class LayoutTest extends Applet { public void init() { setlayout(null); Button a = new Button("First"); Button b = new Button("Second"); Button c = new Button("Third"); Button d = new Button("Fourth"); Button e = new Button("Fifth"); a.setbounds(10,10,100,40); b.setbounds(10,70,100,40); c.setbounds(130,10,100,40); d.setbounds(130,70,100,40); e.setbounds(10,130,220,60); } add(a); add(b); add(c); add(d); add(e); } OO-Graphics in Java Das Java AWT (II) 131

Window Ein Window-Objekt ist ein spezieller Container, dessen Peer ein eigenes Fenster ohne Rahmen ist. Der Default-Layout-Manager ist BorderLayout. Konstruktor: public Window(Frame parent) Der Konstruktor für Window verlangt als Übergabe- Parameter ein Frame-Objekt. Merkregel: Ein Dialog- Popup gehört zu einem vernünftigen Fenster. Woher bekommt man dieses Frame-Objekt? Im Falle von Applets existiert ein Top-Level-Window, zum Beispiel das Appletviewer-Fenster oder das Fenster des Netscape Navigator. Dieses erhält man über wiederholte getparent()-aufrufe aus Component. Achtung: Dieser Ansatz ist nicht portabel und nicht zuverlässig! Zudem sind eigenständige Windows bei Applets selten sinnvoll. Im Fall von Applications sollte man sowieso schon ein Frame-Objekt haben. Wichtig: Windows sind per default nicht sichtbar man muss show aufrufen. OO-Graphics in Java Das Java AWT (II) 132

Frame (I) Ein Frame ist ein richtiges Window, mit sämtlichen Dekorationen, einer Titelleiste, usw. Konstruktoren: public Frame() erzeugt ein (noch) nicht sichtbares Window. Der Default-Layout-Manager ist BorderLayout. public Frame(String title) erzeugt ein (noch) nicht sichtbares Window mit Titel title. OO-Graphics in Java Das Java AWT (II) 133

Frame (II) Wichtige Methoden: String gettitle() und void settitle() Zugriff auf die Titelleiste Image geticonimage() und void seticonimage(image im) wird nicht von allen Plattformen unterstützt MenuBar getmenubar() und void setmenubar(menubar mb) Zugriff auf das Window-Menu boolean isresizable() und void setresizable(boolean rs) Muss gesetzt werden, bevor der Peer erzeugt wird int getcursortype() und void setcursor(int cursortype) wird ab Java 1.1 durch die Methoden set- und getcursor von Component ersetzt siehe unten! OO-Graphics in Java Das Java AWT (II) 134

Frame (III) Einige Methoden aus Window und Component public void show() und public void hide() Windows sind per default unsichtbar! public boolean isshowing() ist true, wenn das Fenster sichtbar ist public void tofront() und public void toback() bringen das Fenster in den Vordergrund oder Hintergrund public void dispose() entfernt das Window vollständig (inklusive Peer) public void pack() bringt Subkomponenten auf ihre preferredsize und passt die Grösse des Windows an. Sowohl pack als auch show sorgen für die Erzeugung des Peers des Windows. OO-Graphics in Java Das Java AWT (II) 135

Ein Beispiel Dieses Programm erzeugt ein Fenster mit einem Button: import java.awt.*; public class MyApplication extends Object { } public static void main(strings argv[]) { Frame top = new Frame("My Application"); Button b = new Button("Push!"); top.add("center",b); top.pack(); top.show(); } Problem: Das Fenster reagiert nicht auf Close es bleibt, solange die JVM läuft! Dazu: Eventhandling! OO-Graphics in Java Das Java AWT (II) 136

Insets Damit das Layout nicht mit den Dekorationen ins Gehege kommt, fragt der LayoutManager den Container nach seinen Insets (Einschüben). Insets-Objekte ähneln Rectangle-Objekten, haben aber viel weniger Funktionalität. Ihre wichtigste Eigenschaft sind vier public int-variablen, deren Bedeutung das folgende Bild erklärt: left right top bottom Man erhält die Insets eines Containers über die getinsets()-methode, die man auch überschreiben muss, wenn das Layout einen anderen Rand beachten soll (aber Achtung: Nicht kleiner machen!) OO-Graphics in Java Das Java AWT (II) 137

Cursor Jedes Component kann einen anderen Mauszeiger erhalten. Leider erlaubt es das AWT derzeit nicht, eigene Mauszeiger zu erzeugen, aber man kann aus einer Vielzahl von Standard-Zeigern wählen: Cursor.DEFAULT_CURSOR Cursor.CROSSHAIR_CURSOR Cursor.TEXT_CURSOR Cursor.WAIT_CURSOR Cursor.HAND_CURSOR Cursor.MOVE_CURSOR Cursor.N_RESIZE_CURSOR Cursor.S_RESIZE_CURSOR Cursor.E_RESIZE_CURSOR Cursor.W_RESIZE_CURSOR Cursor.NE_RESIZE_CURSOR Cursor.NW_RESIZE_CURSOR Cursor.SE_RESIZE_CURSOR Cursor.SW_RESIZE_CURSOR Man erhält ein Cursor-Object durch Aufruf der statischen Methode static public Cursor getpredefinedcursor(int type) mit einer der oben genannten Variablen als type. Beispiel: Button b = new Button("WAIT NOW!"); b.setcursor(cursor.getpredefinedcursor(cursor.wait_cursor)); OO-Graphics in Java Das Java AWT (II) 138

Menus Es gibt noch die eine weitverzweigte Hierarchie von Menus, MenuItems, PopupMenus. Diese können nahezu beliebig geschachtelt werden. In Java 1.0 war die einzige Möglichkeit, ein Menu darzustellen, einen Menubalken an ein eigenes Fenster zu heften. In Java 1.1 gibt es komponentenspezifische Popup- Menus! OO-Graphics in Java Das Java AWT (II) 139

JavaBeans Die portable Version von ActiveX/OCX/... JavaBeans folgen einem genau spezifizierten Namensschema: properties werden über get-/set-paare adressiert das komplette AWT besteht aus Beans Beans können unsichtbar sein Es gibt Tools zur Einbindung von Beans als ActiveX-Controls (bridges) Trennung von Bildschirmdarstellung und Funktionalität zwingend notwendig; nicht nur deswegen, aber auch daher das neue Event-Modell! OO-Graphics in Java Das Java AWT (II) 140

Ausblick Swing Swing ist der Codename für die AWT-Erweiterungen in den Java Foundation Classes, die derzeit von Javasoft (und Netscape) entwickelt werden Swing unterstützt JavaBeans Swing ist lightweight Swing hat pluggable look-and-feel Swing ist schöner! Das API ist stabil (Version 1.0) Swing ist Bestandteil des JDK-1.2 OO-Graphics in Java Das Java AWT (II) 141

OO-Graphics in Java Das Java AWT (II) 142