Einführung in Java, Teil 6

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

GUI Programmierung mit JAVA Swing

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

Objektorientierte Programmierung

JButton, JCheckBox, JRadioButton. Programmieren II. Vorlesung 7. Handout S. 1. Dr. Klaus Höppner. Hochschule Darmstadt Sommersemester 2009.

Swing Lernen am Code Teil 1

Java I Vorlesung 11 Graphische Oberflächen mit Swing

Zentrale Objekte zur Programmierung graphischer Benutzeroberflächen (GUI)

Objektorientierte Software-Entwicklung

...erinnern Sie sich? oopjs4b / kwhbkd4r

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

AK-Automatisierungs und Kommunikationstechnik TI Technische Informatik. NWT Netzwerktechnik

Grundlagen der Programmierung APPLETS

Mensch-Maschine-Interaktion

NTB Druckdatum:

Swing :Komponenten I (Teil 2)

Institut für Informatik

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

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

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

Einführung in Swing. Graphical User Interface

11. GUI-Programmierung mit SWING Überblick

Wiederholung: Objektorientierte Oberflächen-Programmierung mit Java und Swing

04 - Actions. Actions

Ein Manager mit CardLayout layout/cards.java

GUI-Programmierung in Java

Softwarepraktikum: Enigma

GUIs in Java und ihre Programmierung

Lösungen. 1. Aufgabe. // ActionExample.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.

Vorlesung 13. Sitzung Grundlegende Programmiertechniken

J.1. J.1 GUI-Programmierung in in Java Prof. Dr. Rainer Manthey Informatik II 1

Interaktive Elemente, GUI-Programmierung

SWING. DVG2-09 -Swing 1

Graphische Programmierung: GUIs: graphical user interfaces

14 Swing-Komponenten , Prof. Dr. D. Ratz

Fachhochschule Fulda Fachbereich Angewandte Informatik. Hausarbeit Seminar: Java3D. Java Layout-Manager WS 2002/2003

Session 1: Classes and Applets

Grafische Benutzeroberflächen mit Swing

AWT. Einfache AWT-Anwendung. Swing. Vorlesung 1. Handout S. 2. import java. awt. * ;

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

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

Programmierkurs. 11. Vorlesung. Sven Mallach. 13. Januar Institut für Informatik - Lehrstuhl Prof. Dr. M. Jünger 1/ 60

Programmieren 2 Selbststudium Semesterwoche 4

Einstieg in die Informatik mit Java

JAVA Oberflächen mit Swing

2. Programmierung von Benutzungsschnittstellen

Probeklausur: Programmierung WS04/05

Aufbau einer Swing-Applikation

GUI Programmierung in Java

Abteilung Informatik, JFC/Swing 2004 Diego Schmidlin V2.1. Abteilung Informatik, JFC/Swing 2004 Diego Schmidlin V2.1

GUI-Programmierung. Kapitel Der Window-Manager

Benutzeroberflächen. Java Teil 4

GUI Design. Universität Paderborn Prof. Dr. Stefan Böttcher. Java Swing und AWT

Inhalt. Hans-Georg Beckmann Virtuelle Lehrerfortbildung im Fach Informatik in Niedersachsen

Dr. Monika Meiler. Inhalt

Ansonsten VIEL SPAß! Nicholas Ohs (GK 11 IF 2)

Abteilung Informatik, JFC/Swing 2004 Diego Schmidlin V2.2

Entwicklung von E-Learning Komponenten zur Computergrafik

Vorlesung Informatik II

5. Das Java AWT (II) Components und Container

Kurs OPR. Objektorientierte Programmierung

Handbuch für die Erweiterbarkeit

Java GUI und Applet Grundlagen

Java: Swing Komponenten I. Maike Brandt

2A Basistechniken: Weitere Aufgaben

Einstieg in die Informatik mit Java

Kapitel 14. Systemarchitektur

Udo Matthias Munz. Datenbanken und SQL. mit. Einführung. Informationstechnik

Teil 5: Benutzeroberflächen 5.2 Einführung GUI-Programmierung Prof. Dr. Max Mühlhäuser FG Telekooperation TU Darmstadt

Java Lab 2006/12/13 Client

Techniken der Projektentwicklung

Java Projekt: Tic Tac Toe + GUI

Probeklausur: Programmierung WS04/05

Objektorientierte Softwareentwicklung

Einbindung der Tastatur

Schritt 1 - Ein Spielfeld

Tutorial04: Swing: Erstellen eines JFrames mit einem JSplitPane

11. GUI-Programmierung mit SWING Überblick

6. Objektorientiertes Design

Theorie zu Übung 8 Implementierung in Java

DHBW Karlsruhe, Vorlesung Programmieren, Events Musterlösung

1. Grundlegende Konzepte in Java (6 Punkte)

GRAFISCHE BENUTZERSCHNITTSTELLEN

Graphische Benutzungsoberflächen

Teil 1: Grundeigenschaften von Rechnern und Software

2 Entwurf eines einfachen Telefonbuchs

von Anja Austermann Drag and Drop

Java Design und Event Handling. Natascha Hoebel Professur Prof. R. V. Zicari. AWT SWING Layout Design Event Handling

Aufgabe 1 AUFRÄUMARBEIT, KONSISTENZ. »Programmieren«, WS 2006/2007. Nino Simunic M.A.

Java Applikationen, Swing/JFC

Transkript:

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

Überblick Teil 5: JApplet-Grundlagen Teil 6: Elemente der Swing Bibliothek 2000, IAS 2

Elemente von Swing Swing-Übersicht Swing bietetet eine Vielzahl von Komponenten für graphische Benutzeroberflächen Swing-Komponenten können in Containern verschachtelt werden wichtige Swing-Komponenten Container ermöglichen Verschachtelungen, sie können konkrete Komponenten oder andere Container enthalten. Häufigster Vertreter: JPanel (JApplet ist von JPanel abgeleitet) Canvas ist ein Zeichenbereich zur Erstellung von Graphiken GUI-Komponenten, wie z.b. Labels, Schaltflächen, Listenfelder, Textfelder, Kontrollfelder, u.s.w. Fensterkomponenten, wie z.b. Fenster, Rahmen, Menüleisten, Dialogfelder alle Elemente sind als Klassenhierarchie im javax.swing- Paket organisiert 2000, IAS 3

Elemente von Swing Swing- JLabel (1) JLabel: nicht-editierbare Zeichenkette, die zur Beschriftung anderer Komponenten dient Vorteile von JLabels (gegenüber drawstring()): keine paint()-anweisungen notwendig automatische Layout-Anpassungen JLabel-Konstruktoren: JLabel() erzeugt leeres, links ausgerichtetes Label JLabel( String ) erzeugt Label mit Zeichenkette JLabel( String, int ) ermöglicht Ausrichtung mit Hilfe von Label-Klassenvariablen JLabel.RIGHT, JLabel.LEFT, JLabel.CENTER die Schrift des JLabels kann mit setfont() beliebig geändert werden 2000, IAS 4

Elemente von Swing Swing- JLabel (2) Beispiel import javax.swing.*; import java.awt.*; public class JLabelTest extends javax.swing.japplet { public void init() { setfont( new Font( Helvetica, Font.BOLD, 16)); getcontentpane().setlayout( new GridLayout( 3, 1 )); getcontentpane().add( new JLabel( linksgerichtet,jlabel.left)); getcontentpane(). add( new JLabel( zentriert,jlabel.center)); getcontentpane(). add( new JLabel( rechtsgerichtet, JLabel.RIGHT)); Label-Methoden: gettext() gibt die Zeichenkette des Labels aus settext(string) ändert den Label-Text getalignment() gibt die Ausrichtung des Label als Integer zurück: 0 (links), 1 (zentriert) oder 2 (rechts) setalignment(int) ändert die Label-Ausrichtung 2000, IAS 5

Elemente von Swing Swing - Schaltflächen Schaltfläche (Button): kann mit der Maus angeklickt werden und Aktionen auslösen Konstruktoren: JButton() erzeugt Schaltfläche ohne Beschriftung JButton( String ) erzeugt Schaltfläche mit String als Beschriftung Methoden: getlabel() gibt die Beschriftung der Schaltfläche zurück setlabel( String ) beschriftet die Schaltfläche mit String Beispiel import javax.swing.*; import java.awt.*; public class JButtonTest extends javax.swing.japplet { public void init() { getcontentpane().setlayout(new FlowLayout()); getcontentpane().add(new JButton( OK )); getcontentpane().add(new JButton( Cancel )); 2000, IAS 6

Elemente von Swing Swing - Kontrollfelder Kontrollfelder (Checkbox) stellen Optionen bereit, die gewählt oder nicht gewählt werden können. Die Optionen schließen sich nicht gegenseitig aus (Mehrfachauswahl möglich) Konstruktoren: JCheckBox() erzeugt unbeschriftetes, nicht gewähltes Kontrollfeld JCheckBox( String ) erzeugt Kontrollfeld mit String- Beschriftung JCheckBox( String, boolean ) erzeugt beschriftetes Kontrollfeld, welches ausgewählt (true) oder nicht ausgewählt (false) ist Methoden: getlabel() gibt Feldbeschriftung aus setlabel( String ) ändert Feldbeschriftung getstate() gibt true oder false (je nach Selektion) aus setstate(boolean) ändert Auswahlstatus des Kontrollfeldes 2000, IAS 7

Elemente von Swing Swing - Kontrollfelder import javax.swing.*; import java.awt.*; public class JCheckBoxTest extends javax.swing.japplet { public void init() { getcontentpane().setlayout(new FlowLayout(FlowLayout.LEFT)); getcontentpane().add(new JCheckBox("Rot", false)); getcontentpane().add(new JCheckBox("Grün", false)); getcontentpane().add(new JCheckBox("Blau", false)); 2000, IAS 8

Elemente von Swing Swing - Auswahlknöpfe Auswahlknöpfe sind ähnlich wie Kontrollfelder, es kann allerdings nur eine Option gewählt werden. Die einzelnen Optionen werden in einer ButtonGroup gruppiert: Beispiel mport javax.swing.*; import java.awt.*; public class JRadioButtonTest extends javax.swing.japplet { public void init() { getcontentpane().setlayout(new FlowLayout(FlowLayout.LEFT)); ButtonGroup group = new ButtonGroup(); JRadioButton button; button = new JRadioButton("Rot", true); getcontentpane().add(button); group.add(button); button = new JRadioButton("Grün", false); getcontentpane().add(button); group.add(button); button = new JRadioButton("Blau", false); getcontentpane().add(button); group.add(button); 2000, IAS 9

Swing - Textfelder (1) Textfelder (TextField) stellen editierbaren Bereich für die Eingabe einer Textzeile zur Verfügung Konstruktoren: JTextField() erzeugt leeres Textfeld JTextField( String ) erzeugt mit Zeichenkette initialisiertes Textfeld, Breite wird durch aktuellen Layout-Manager vorgegeben JTextField( String, int ) erzeugt initialisiertes Textfeld mit vorgegebener Breite (Zeichen) JTextField tf = new JTextField( Erstes Textfeld, 30); getcontentpane().add( tf ); zur Beschriftung des Textfeldes muss ein zusätzliches Label verwendet werden 2000, IAS 10

Swing - Textfelder (2) Methoden: gettext() gibt Text als Zeichenkette aus settext( String ) setzt Zeichenkette in das Feld getcolumns() gibt Breite des Textfeldes aus select( int, int ) wählt Text zwischen beiden Positionen aus selectall() wählt den gesamten Text aus iseditable() gibt aus, ob Text editierbar ist (true/false) seteditable( boolean ) ermöglicht (true) oder verbietet (false) editieren des Textes Beispiel... public void init() { getcontentpane().setlayout( new GridLayout( 1, 2, 5, 15 ) ); getcontentpane().add( new JLabel( Name: ) ); getcontentpane(). add( new JTextField( Ihren Namen bitte, 40) ); 2000, IAS 11

Layout-Manager jedes Applet (Panel) kann konkrete Komponenten oder weitere Panels enthalten ein Layout-Manager bestimmt, wie die Swing-Elemente in einem Panel dynamisch angeordnet werden jedes Panel kann einen eigenen Layout-Manager besitzten das AWT beinhaltet fünf verschiedene Layout-Manager: FlowLayout, GridLayout, BorderLayout, CardLayout und GridBagLayout ein Manager wird in einem Panel verwendet, indem a) eine Instanz einer Layout-Manager-Klasse gebildet wird und b) die setlayout()-methode für das umgebende Panel aufgerufen wird die Reihenfolgen, in der Swing-Elemente in das Layout eingefügt werden (add()-methode), ist entscheidend für ihre Positionierung 2000, IAS 12

FlowLayout das FlowLayout ordnet die Komponenten zeilenweise von links nach rechts an. Passt eine Komponente nicht in die Zeile, wird automatisch eine neue Zeile begonnen die zentrierte Zeilenausrichtung kann mit den Klassenvariablen FlowLayout.RIGHT und FlowLayout.LEFT verändert werden der horizontale und vertikale Abstand kann durch zwei Integer-Argumente angegeben werden Beispiel import java.awt.*; import javax.swing.*; public class FlowTest extends javax.swing.japplet { public void init() { getcontentpane().setlayout(new FlowLayout(FlowLayout.LEFT, 20, 20)); getcontentpane().add(new JButton("Eins")); getcontentpane().add(new JButton("Zwei")); getcontentpane().add(new JButton("Drei")); getcontentpane().add(new JButton("Vier")); 2000, IAS 13

GridLayout bei GridLayout wird das Panel in Zeilen und Spalten unterteilt. Die Komponenten werden von links nach rechts und von oben nach unten eingefügt auch hier können zusätzliche horizontale und vertikale Abstände zwischen den Komponenten angegeben werden Beispiel import java.awt.*; import javax.swing.*; public class GridTest extends javax.swing.japplet { public void init() { getcontentpane(). setlayout(new GridLayout(2, 2, 3, 10)); getcontentpane(). add(new JButton("Eins")); getcontentpane(). add(new JButton("Zwei")); getcontentpane(). add(new JButton("Drei")); getcontentpane(). add(new JButton("Vier")); 2000, IAS 14

BorderLayout beim BorderLayout werden Komponenten mit Hilfe von geographischen Angaben (North, East, South, West, Center) angeordnet Beispiel import java.awt.*; import javax.swing.*; public class BorderTest extends javax.swing.japplet { public void init() { getcontentpane(). setlayout(new BorderLayout(5, 10)); getcontentpane().add("north", new JButton("Eins")); getcontentpane().add("east", new JButton("Zwei")); getcontentpane().add("south", new JButton("Drei")); getcontentpane().add("west", new JButton("Vier")); 2000, IAS 15

Card- und GridBagLayout die Karten in einem CardLayout sind unterschiedliche Panels, die nacheinander eingefügt und angezeigt werden. Es kann jeweils nur eine Karte angezeigt werden, aber man kann zwischen den Karten wechseln das GridBagLayout ist der mächtigste, aber auch der komplizierteste Layout-Manager - er ermöglicht die Anordnung der Komponenten in einem rasterähnlichen Layout im GridBagLayout kann zusätzlich die Weite der einzelnen Zellen, sowie die Proportionen zwischen Zeilen und Spalten kontrolliert werden die Fähigkeiten des GridBag-Manager können meistens durch Verschachteln einfacherer Manager nachgebildet werden 2000, IAS 16

Listener für GUI-Komponenten (1) Listener-Interface Ereignis Definition (alle public void) ActionListener Aktion actionperformed(actionevent e) ItemListener Liste itemstatechanged(itemevent e) gewählt FocusListener Fokuserhalt focusgained(focusevent e) Fokusverlust focuslost(focusevent e) TextListener Text geändert textvaluechanged(textevent e) die meisten dieser Listener-Schnittstellen (bis auf FocusListener) besitzten keine Adapterklassen, d.h. die Schnittstellen müssen von Hand implementiert werden 2000, IAS 17

Listener für GUI-Komponenten (2) bei der Implementierung der Listener-Schnittstelle kann mit Hilfe der getsource()-methode eine Referenz auf die Komponente ermittelt werden, die das Ereignis erhalten hat public void actionperformed( ActionEvent e ){ Button ursprung = e.getsource(); if( ursprung.getlabel().equals( OK )) { // Behandlung von OK else if( ursprung.getlabel().equals( Cancel )) { // Behandlung von Cancel Listener werden durch spezielle Methoden mit den GUI-Elementen verbunden addactionlistener(); additemlistener(); addfocuslistener(); 2000, IAS 18

Listener für GUI-Komponenten (3) für die Registrierung des Listeners in der init()-methode muss bei jeder empfangenden Komponente einzeln registriert werden JButton OKButton = new JButton( OK ); // OKButtonAction implementiert ActionListener OKButtonAction ok = new OKButtonAction(); OKButton.addActionListener( ok ); Details können der API-Dokumentation des jeweiligen Oberflächenelements oder der Schnittstelle entnommen werden 2000, IAS 19

Listener für GUI-Komponenten (4) Beispiel import java.awt.*; Import javax.swing.*; import java.awt.event.*; public class MultiListener extends javax.swing.japplet implements ActionListener { JTextArea lefttextarea; JTextArea righttextarea; JButton button1, button2; public void init() { GridLayout gridbag = new GridLayout(3, 2, 5, 5); getcontentpane().setlayout(gridbag); JLabel l = new JLabel("Das Applet hoert:"); getcontentpane().add(l); JLabel r = new JLabel("Die externe Klasse hoert:"); getcontentpane().add(r); 2000, IAS 20

Listener für GUI-Komponenten (5) Beispiel (Forts.) lefttextarea = new JTextArea(5, 20); lefttextarea.seteditable(false); getcontentpane().add(lefttextarea); righttextarea = new JTextArea(5, 20); righttextarea.seteditable(false); getcontentpane().add(righttextarea); button1 = new JButton("Schaltflaeche 1"); getcontentpane().add(button1); button2 = new JButton("Schaltflaeche 2"); getcontentpane().add(button2); button1.addactionlistener(this); button2.addactionlistener(this); button2.addactionlistener(new MyTextListener(rightTextArea)); // Ende init()-methode 2000, IAS 21

Listener für GUI-Komponenten (6) Beispiel (Forts.) public void actionperformed(actionevent e) { lefttextarea.append(e.getactioncommand() + "\n"); // Ende MultiListener-Klasse class MyTextListener implements ActionListener { JTextArea mytextarea; public MyTextListener ta) { mytextarea = ta; public void actionperformed(actionevent e) { mytextarea.append(e.getactioncommand() + "\n"); 2000, IAS 22

Listener für GUI-Komponenten (7) 2000, IAS 23

Zusammenfassung Swing bietet graphische Oberflächenelemente: Labels Schaltflächen Kontrollfelder Optionsfelder Auswahlmenüs Textfelder mit den fünf Layout-Managern können Swing-Komponenten dynamisch angeordnet werden für die Komponenten-Ereignisse stehen spezielle Schnittstellen zur Verfügung eine Listener muss jeder einzelnen empfangenden Komponente registriert werden 2000, IAS 24

Was wurde nicht behandelt? Threads ( Miniprozesse ) z.b. Drucken im Hintergrund Java-Applikationen mit Swing Netzkommunikation, Client/Server-Applikationen 2000, IAS 25