Java Swing Prof. Dr. Bernhard Humm Hochschule Darmstadt – University of Applied Sciences...

25
Java Swing Prof. Dr. Bernhard Humm Hochschule Darmstadt – University of Applied Sciences Wintersemester 2006/2007 CNAM Praktikum Systementwicklung

Transcript of Java Swing Prof. Dr. Bernhard Humm Hochschule Darmstadt – University of Applied Sciences...

Page 1: Java Swing Prof. Dr. Bernhard Humm Hochschule Darmstadt – University of Applied Sciences Wintersemester 2006/2007 CNAM Praktikum Systementwicklung.

Java Swing

Prof. Dr. Bernhard HummHochschule Darmstadt – University of Applied SciencesWintersemester 2006/2007

CNAMPraktikum Systementwicklung

Page 2: Java Swing Prof. Dr. Bernhard Humm Hochschule Darmstadt – University of Applied Sciences Wintersemester 2006/2007 CNAM Praktikum Systementwicklung.

GUIs

Java Swing

GUI-Statik

GUI-Dynamik

Referenzen

Seite 2Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/07. 13.12.2006

GUIs

Agenda

Agenda

Page 3: Java Swing Prof. Dr. Bernhard Humm Hochschule Darmstadt – University of Applied Sciences Wintersemester 2006/2007 CNAM Praktikum Systementwicklung.

Seite 3Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/07., 13.12.2006,

Grafische Benutzeroberflächen (GUIs)

Dialog stammt aus ARRIBA 8.0 der RIB Software AG (www.rib.de)

GUIs

Page 4: Java Swing Prof. Dr. Bernhard Humm Hochschule Darmstadt – University of Applied Sciences Wintersemester 2006/2007 CNAM Praktikum Systementwicklung.

Seite 4Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/07., 13.12.2006,

Bausteine für das Dialoglayout (Bibliothek)

Kopfzeile

Datei Bearbeiten Ansicht Hilfe

WertFeld

Button

Teildialog Reiter

Spalte Spalte Spalte Spalte

U 051111 000 051112

A 051115 001 051115

A 051115 001 051115

A 051115 001 051115

V 051117 000 051117

GUIs

Page 5: Java Swing Prof. Dr. Bernhard Humm Hochschule Darmstadt – University of Applied Sciences Wintersemester 2006/2007 CNAM Praktikum Systementwicklung.

GUIs

Java Swing

GUI-Statik

GUI-Dynamik

Referenzen

Seite 5Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/07. 13.12.2006

Java Swing

Agenda

Agenda

Page 6: Java Swing Prof. Dr. Bernhard Humm Hochschule Darmstadt – University of Applied Sciences Wintersemester 2006/2007 CNAM Praktikum Systementwicklung.

Seite 6Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/07., 13.12.2006,

Java Swing

Java Swing: Bibliothek von Bausteinen zur Erstellung von GUIs in Java

Teil der JFC (Java Foundation Classes

Basierend auf AWT (Abstract Windowing Toolkit, dem ersten, einfachen GUI-Framework in Java

Portable, das heißt betriebssystemunabhängige GUIs

Unser Beispiel: Calculator

Java Swing

Page 7: Java Swing Prof. Dr. Bernhard Humm Hochschule Darmstadt – University of Applied Sciences Wintersemester 2006/2007 CNAM Praktikum Systementwicklung.

GUIs

Java Swing

GUI-Statik

GUI-Dynamik

Referenzen

Seite 7Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/07. 13.12.2006

GUI-Statik

Agenda

Agenda

Page 8: Java Swing Prof. Dr. Bernhard Humm Hochschule Darmstadt – University of Applied Sciences Wintersemester 2006/2007 CNAM Praktikum Systementwicklung.

Seite 8Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/07., 13.12.2006,

JFrame:Ein leeres Fenster anlegen

javax.swing.*: Java Extensions mit allen Swing-Klassen

JFrame: Fenster mit Rahmen und Inhaltsbereich (anfangs leer)

JFrame wird initialisiert (damit erst einmal noch nicht sichtbar)

Mit frame.setTitle(“Calculator“) kann der Fenstertitel gesetzt werden (alternativ mit Konstruktor)

Anzeigen: frame.setVisible(true);

package gui;

import javax.swing.JFrame;

public class CalculatorFrame extends JFrame {

public static void main(String[] args) { CalculatorFrame calculatorFrame = null;

calculatorFrame = new CalculatorFrame (); calculatorFrame.setVisible(true); }

public CalculatorFrame() { super("Calculator"); }}

GUI-Statik

Page 9: Java Swing Prof. Dr. Bernhard Humm Hochschule Darmstadt – University of Applied Sciences Wintersemester 2006/2007 CNAM Praktikum Systementwicklung.

Seite 9Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/07., 13.12.2006,

Das Fenster füllen: statisches GUI-Layout

cd GUI elements

calculator:JFrame

contentPane:Container

calculatorPanel:JPanel

commandPanel:JPanel

operatorLabel:JLabel

operatorTextField:JTextField

quitButton:JButton

GUI-Statik

Page 10: Java Swing Prof. Dr. Bernhard Humm Hochschule Darmstadt – University of Applied Sciences Wintersemester 2006/2007 CNAM Praktikum Systementwicklung.

Seite 10Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/07., 13.12.2006,

Component Hierarchie

Component: Objekt mit graphischer Repräsentation (AWT und Swing); kann Events verschicken und empfangen,

Container: Behälter für andere Components (Composite Pattern); kann LayoutManager benutzen

JComponent: Basisklasse für alle Swing-Komponenten; kann Look and Feel setzen

JFrame, JDialog, JApplet: top-level Swing-Container

JPanel: eingebetteter Swing-Container

JLabel, JTextField, JButton, …: Swing-Komponenten

GUI-Statik

Page 11: Java Swing Prof. Dr. Bernhard Humm Hochschule Darmstadt – University of Applied Sciences Wintersemester 2006/2007 CNAM Praktikum Systementwicklung.

Seite 11Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/07., 13.12.2006,

LayoutManager

Der LayoutManager ist für die Anordnung der Dialogelemente im Fenster verantwortlich

Jeder LayoutManager verfolgt dabei eine eigene Strategie, Elemente zu platzieren und in der Größe so anzupassen, dass sie aus seiner Sicht optimal präsentiert werden

Standard-LayoutManager:

– FlowLayout

– GridLayout

– BorderLayout

– CardLayout

– GridBagLayout

Null-Layout: Handarbeit

GUI-Statik

Page 12: Java Swing Prof. Dr. Bernhard Humm Hochschule Darmstadt – University of Applied Sciences Wintersemester 2006/2007 CNAM Praktikum Systementwicklung.

Seite 12Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/07., 13.12.2006,

FlowLayout

Das FlowLayout ordnet Dialogelemente nebeneinander in einer Zeile an

Wenn keine weiteren Elemente in die Zeile passen, wird mit der nächsten Zeile fortgefahren.

GUI-Statik

Page 13: Java Swing Prof. Dr. Bernhard Humm Hochschule Darmstadt – University of Applied Sciences Wintersemester 2006/2007 CNAM Praktikum Systementwicklung.

Seite 13Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/07., 13.12.2006,

GridLayout

Das GridLayout ordnet die Dialogelemente in einem rechteckigen Gitter an, dessen Zeilen- und Spaltenzahl beim Erstellen des Layoutmanagers angegeben wird

(Das GridBagLayout ist ein komplexer Layoutmanager, der die Fähigkeiten von GridLayout erweitert und es ermöglicht, mit Hilfe von Bedingungsobjekten sehr komplexe Layouts zu erzeugen)

GUI-Statik

Page 14: Java Swing Prof. Dr. Bernhard Humm Hochschule Darmstadt – University of Applied Sciences Wintersemester 2006/2007 CNAM Praktikum Systementwicklung.

Seite 14Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/07., 13.12.2006,

BorderLayout

Das BorderLayout verteilt die Dialogelemente nach Vorgabe des Programms auf die vier Randbereiche und den Mittelbereich des Fensters:

– NORTH

– SOUTH

– WEST

– EAST

– CENTER commandPanel: SOUTH

calculatorPanel: CENTER

GUI-Statik

Page 15: Java Swing Prof. Dr. Bernhard Humm Hochschule Darmstadt – University of Applied Sciences Wintersemester 2006/2007 CNAM Praktikum Systementwicklung.

Seite 15Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/07., 13.12.2006,

Das statische GUI-Layout programmieren

Swing-Komponenten erzeugen durch Instanziierung, zum Beispiel new JLabel

JPanels erzeugen durch Instanziierung

Komponenten zu Containern hinzufügen durch add

Beispiele für 3 LayoutManager

frame.pack() (aus java.awt.Window): führt das Layout durch und passt die Fenstergröße an

private void layoutFrame() { Container contentPane;

aLabel = new JLabel("a:"); aTextField = new JTextField(); calculatorPanel = new JPanel(new GridLayout(4, 2)); calculatorPanel.add(aLabel); calculatorPanel.add(aTextField); … computeButton = new JButton("Compute"); commandPanel = new JPanel(new FlowLayout()); commandPanel.add(computeButton); … contentPane = this.getContentPane(); contentPane.setLayout(new BorderLayout()); contentPane.add(calculatorPanel, BorderLayout.CENTER); contentPane.add(commandPanel, BorderLayout.SOUTH); … this.pack(); }

GUI-Statik

Page 16: Java Swing Prof. Dr. Bernhard Humm Hochschule Darmstadt – University of Applied Sciences Wintersemester 2006/2007 CNAM Praktikum Systementwicklung.

GUIs

Java Swing

GUI-Statik

GUI-Dynamik

Referenzen

Seite 16Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/07. 13.12.2006

GUI-Dynamik

Agenda

Agenda

Page 17: Java Swing Prof. Dr. Bernhard Humm Hochschule Darmstadt – University of Applied Sciences Wintersemester 2006/2007 CNAM Praktikum Systementwicklung.

Seite 17Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/07., 13.12.2006,

Das Model View Controller (MVC) Muster

Muster zur Gestaltung grafischer Benutzeroberflächen (aus Smalltalk 80)

View: grafische Repräsentation, kennt Controller und Model

Controller: Ablaufsteuerung, kennt View und Model

Model: Anwendungsdaten und –funktionen; kennt im Idealfall weder Controller noch View; meldet nur Änderungen (Observer Pattern)

JFrame implementiert View

View:grafische

Repräsen-tation

Controller:Ablauf-

steuerung

Model:Anwendungs-

daten und funktionen

GUI-Dynamik

Page 18: Java Swing Prof. Dr. Bernhard Humm Hochschule Darmstadt – University of Applied Sciences Wintersemester 2006/2007 CNAM Praktikum Systementwicklung.

Seite 18Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/07., 13.12.2006,

Delegation-based Event Handling

Kommunikation zwischen Betriebssystem und Anwendungsprogramm erfolgt durch das Versenden von Nachrichten

Ereignisquellen (Event Sources) sind die Auslöser der Nachrichten

Ereignisempfängern (EventListeners) sind Objekte, die das zum Ereignis passende Empfänger-Interface implementieren

Damit ein Ereignisempfänger die Nachrichten einer bestimmten Ereignisquelle erhält, muss er sich bei dieser registrieren

Delegation Based Event Handling: Mechanismus in Swing (mächtiger, aber auch komplexer als entsprechender Mechanismus in AWT)

GUI-Dynamik

Page 19: Java Swing Prof. Dr. Bernhard Humm Hochschule Darmstadt – University of Applied Sciences Wintersemester 2006/2007 CNAM Praktikum Systementwicklung.

Seite 19Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/07., 13.12.2006,

Events (Ereignisse)

Klassenhierarchie für alle Ereignistypen; Wurzel: java.util.EventObject, Events für GUI-Programmierung in java.awt.AWTEvent

Low-Level-Ereignisse ComponentEvent: für den Transfer von elementaren Nachrichten zuständig, die von Fenstern oder Dialogelementen stammen

Semantische Ereignisse ActionEvent, AdjustmentEvent, ItemEvent und TextEvent: nicht an ein bestimmtes GUI-Element gebunden, sondern übermitteln höherwertige Ereignisse wie das Ausführen eines Kommandos oder die Änderung eines Zustands

GUI-Dynamik

Page 20: Java Swing Prof. Dr. Bernhard Humm Hochschule Darmstadt – University of Applied Sciences Wintersemester 2006/2007 CNAM Praktikum Systementwicklung.

Seite 20Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/07., 13.12.2006,

Listener (Ereignisempfänger)

Damit ein Objekt Nachrichten empfangen kann, muss es eine Reihe von Methoden implementieren, die von der Nachrichtenquelle, bei der es sich registriert hat, aufgerufen werden können

Interfaces implementieren, die aus java.util.EventListener abgeleitet sind

Je Ereignisklasse gibt es ein EventListener-Interface

GUI-Dynamik

Page 21: Java Swing Prof. Dr. Bernhard Humm Hochschule Darmstadt – University of Applied Sciences Wintersemester 2006/2007 CNAM Praktikum Systementwicklung.

Seite 21Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/07., 13.12.2006,

Listener registrieren

Listener muss ein EventListener Interface implementieren

Im Beispiel: Controller-Klasse CalculatorController – ActionListener

Variante anonyme innere Klassen auch gebräuchlich

Ereignis-Auslöser: hier JButton (ActionEvent)

Registrierung von calculatorController bei computeButton durch addActionListener

private void layoutFrame() { ... computeButton = new JButton("Compute"); computeButton.addActionListener( getCalculatorController()); ... }

import java.awt.event.*;

public class CalculatorController implements ActionListener { CalculatorFrame calculatorFrame;…}

GUI-Dynamik

Page 22: Java Swing Prof. Dr. Bernhard Humm Hochschule Darmstadt – University of Applied Sciences Wintersemester 2006/2007 CNAM Praktikum Systementwicklung.

Seite 22Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/07., 13.12.2006,

Auf Events reagieren

ActionListener muss die Methode actionPerformed(ActionEvent e) implementieren

Aufruf des Models, hier: Calculator Klasse mit Klassenmethode compute(a, operator, b)

Parameter auslesen aus View, hier: calculatorFrame. getATextField().getText();

Ergebnis rückschreiben in View, hier: calculatorFrame. getResultTextField(). setText(result);

import java.awt.event.*;

public class CalculatorController implements ActionListener { CalculatorFrame calculatorFrame;

public void actionPerformed(ActionEvent e) { if(e.getActionCommand().equals("Compute")){ String a, operator, b, result; a = calculatorFrame.getATextField().getText(); operator = calculatorFrame.getOperatorTextField(). getText(); b = calculatorFrame.getBTextField().getText(); result = Calculator.compute(a, operator, b); calculatorFrame.getResultTextField().setText(result); } … }}

GUI-Dynamik

Page 23: Java Swing Prof. Dr. Bernhard Humm Hochschule Darmstadt – University of Applied Sciences Wintersemester 2006/2007 CNAM Praktikum Systementwicklung.

Seite 23Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/07., 13.12.2006,

Fenster schließen

frame.setVisible(false): schließt die Anzeige eines Fensters; das Fenster kann durch setVisible(true) jederzeit wieder geöffnet werden

frame.dispose(): schließt die Anzeige des Fensters und räumt alle Ressoucen auf. Das Fenster kann nicht mehr geöffnet werden

System.exit(0): beendet das Programm

import java.awt.event.*;

public class CalculatorController implements ActionListener { CalculatorFrame calculatorFrame;

public void actionPerformed(ActionEvent e) { … if (e.getActionCommand().equals("Quit")){ calculatorFrame.setVisible(false); calculatorFrame.dispose(); System.exit(0); } …}

GUI-Dynamik

Page 24: Java Swing Prof. Dr. Bernhard Humm Hochschule Darmstadt – University of Applied Sciences Wintersemester 2006/2007 CNAM Praktikum Systementwicklung.

GUIs

Java Swing

GUI-Statik

GUI-Dynamik

Referenzen

Seite 24Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/07. 13.12.2006

Referenzen

Agenda

Agenda

Page 25: Java Swing Prof. Dr. Bernhard Humm Hochschule Darmstadt – University of Applied Sciences Wintersemester 2006/2007 CNAM Praktikum Systementwicklung.

Seite 25Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/07., 13.12.2006,

Zum Weiterlesen

Guido Krüger, Handbuch der Java-Programmierung, Kapitel 23 - 40

Referenzen