Swing Concepts Ingo L¨utkebohle Termin 11iluetkeb/2005/session11.pdf · Swing Concepts Ingo...

30
Einleitung Architektur Swing Beispiele Aufgabe Techniken der Projektentwicklung Swing Concepts Ingo L¨ utkebohle Termin 11 Ingo L¨ utkebohle Techniken der Projektentwicklung 1

Transcript of Swing Concepts Ingo L¨utkebohle Termin 11iluetkeb/2005/session11.pdf · Swing Concepts Ingo...

Page 1: Swing Concepts Ingo L¨utkebohle Termin 11iluetkeb/2005/session11.pdf · Swing Concepts Ingo L¨utkebohle Termin 11 Ingo L¨utkebohle Techniken der Projektentwicklung 1. Einleitung

Einleitung Architektur Swing Beispiele Aufgabe

Techniken der ProjektentwicklungSwing Concepts

Ingo Lutkebohle

Termin 11

Ingo Lutkebohle Techniken der Projektentwicklung 1

Page 2: Swing Concepts Ingo L¨utkebohle Termin 11iluetkeb/2005/session11.pdf · Swing Concepts Ingo L¨utkebohle Termin 11 Ingo L¨utkebohle Techniken der Projektentwicklung 1. Einleitung

Einleitung Architektur Swing Beispiele Aufgabe

Einordnung

Was bisher war

Allgemeine Entwurfstechniken

Serielle Programmablaufe (AuD)

Thema heute

Architektur grafischer Benutzeroberflachen (GUIs)

GUIs in Java mit Swing

Ingo Lutkebohle Techniken der Projektentwicklung 2

Page 3: Swing Concepts Ingo L¨utkebohle Termin 11iluetkeb/2005/session11.pdf · Swing Concepts Ingo L¨utkebohle Termin 11 Ingo L¨utkebohle Techniken der Projektentwicklung 1. Einleitung

Einleitung Architektur Swing Beispiele Aufgabe Seriell Ereignisorientiert Benachrichtigung

Serielle Programmarchitektur

Programm kontrolliert Ablauf

Eingabe-Verarbeitung-Ausgabe

Steuerung: Start, festgelegtePunkte

Typisch fur Ubungsaufgaben, kleineSkripte, etc.

System

Main

Data

invoke

read

modify

Ingo Lutkebohle Techniken der Projektentwicklung 3

Page 4: Swing Concepts Ingo L¨utkebohle Termin 11iluetkeb/2005/session11.pdf · Swing Concepts Ingo L¨utkebohle Termin 11 Ingo L¨utkebohle Techniken der Projektentwicklung 1. Einleitung

Einleitung Architektur Swing Beispiele Aufgabe Seriell Ereignisorientiert Benachrichtigung

Architektur grafischer Programme

System (Benutzer)kontrolliert Ablauf

Ablauf variabel

Steuerungereignisorientiert, frei

Inversion of Control

System

Swing

Main

Data

invoke

show

operatenotify modify

disposedispose

observe

Ingo Lutkebohle Techniken der Projektentwicklung 4

Page 5: Swing Concepts Ingo L¨utkebohle Termin 11iluetkeb/2005/session11.pdf · Swing Concepts Ingo L¨utkebohle Termin 11 Ingo L¨utkebohle Techniken der Projektentwicklung 1. Einleitung

Einleitung Architektur Swing Beispiele Aufgabe Seriell Ereignisorientiert Benachrichtigung

Beispielhafte Ereignisse

Neuzeichnen bei...

Aufdecken des Fensters

Selektion eines Elements

Eingabe annehmen...

Drucken eines Buttons

Texteingabe

Ingo Lutkebohle Techniken der Projektentwicklung 5

Page 6: Swing Concepts Ingo L¨utkebohle Termin 11iluetkeb/2005/session11.pdf · Swing Concepts Ingo L¨utkebohle Termin 11 Ingo L¨utkebohle Techniken der Projektentwicklung 1. Einleitung

Einleitung Architektur Swing Beispiele Aufgabe Seriell Ereignisorientiert Benachrichtigung

Benachrichtigungsmechanismen

Direkte Methodenaufrufe

z.B. paintComponent

nur fur sichtbare Komponenten

geschieht automatisch

Ereignisbenachrichtigung

1 Entwickler implementiert EventListener

2 Listener-Instanz an GUI-Komponente anmelden

3 Komponente andert Zustand

4 Listener-Methode empfangt Event

Ingo Lutkebohle Techniken der Projektentwicklung 6

Page 7: Swing Concepts Ingo L¨utkebohle Termin 11iluetkeb/2005/session11.pdf · Swing Concepts Ingo L¨utkebohle Termin 11 Ingo L¨utkebohle Techniken der Projektentwicklung 1. Einleitung

Einleitung Architektur Swing Beispiele Aufgabe Seriell Ereignisorientiert Benachrichtigung

Vorteile von Event-Listenern

Komponente selbst immer gleich

Gruppierung logisch zusammenhangenderEreignisse mehrerer Komponenten

Aufteilung unzusammenhangenderBearbeitung von Ereignissen einerKomponente

Gruppierung

Menu Lists Table

Listener

Aufteilung

Lists

EL 1 EL2

Ingo Lutkebohle Techniken der Projektentwicklung 7

Page 8: Swing Concepts Ingo L¨utkebohle Termin 11iluetkeb/2005/session11.pdf · Swing Concepts Ingo L¨utkebohle Termin 11 Ingo L¨utkebohle Techniken der Projektentwicklung 1. Einleitung

Einleitung Architektur Swing Beispiele Aufgabe Seriell Ereignisorientiert Benachrichtigung

Hinweise zur Implementierung von EventListenern

Initial: Ein EventListener pro Use Case

Reiner Vermittler zwischen GUI und Rest

Fur Swing zeitkritisch (da im Swing-Thread aufgerufen)

Falls Neuzeichnen der GUI notwendig, repaint aufrufen.

Ingo Lutkebohle Techniken der Projektentwicklung 8

Page 9: Swing Concepts Ingo L¨utkebohle Termin 11iluetkeb/2005/session11.pdf · Swing Concepts Ingo L¨utkebohle Termin 11 Ingo L¨utkebohle Techniken der Projektentwicklung 1. Einleitung

Einleitung Architektur Swing Beispiele Aufgabe Komponenten Layout Neue Komponenten

Swing Baukasten

Komponenten fur Benutzerinteraktion→ Direkt verwendbar

Container zur Organisation

Layout-Manager zur Anordnung(hier: vertical/horizontal Box)

Ingo Lutkebohle Techniken der Projektentwicklung 9

Page 10: Swing Concepts Ingo L¨utkebohle Termin 11iluetkeb/2005/session11.pdf · Swing Concepts Ingo L¨utkebohle Termin 11 Ingo L¨utkebohle Techniken der Projektentwicklung 1. Einleitung

Einleitung Architektur Swing Beispiele Aufgabe Komponenten Layout Neue Komponenten

Swing Baukasten

Komponenten fur Benutzerinteraktion→ Direkt verwendbar

Container zur Organisation

Layout-Manager zur Anordnung(hier: vertical/horizontal Box)

Ingo Lutkebohle Techniken der Projektentwicklung 9

Page 11: Swing Concepts Ingo L¨utkebohle Termin 11iluetkeb/2005/session11.pdf · Swing Concepts Ingo L¨utkebohle Termin 11 Ingo L¨utkebohle Techniken der Projektentwicklung 1. Einleitung

Einleitung Architektur Swing Beispiele Aufgabe Komponenten Layout Neue Komponenten

Wichtige Komponenten: Schnittstellenelemente

JTextfield

JComboBox

JMenu & -Item

JSlider

JButton JLabel

Bilder aus http://java.sun.com/docs/books/tutorial/uiswing/components/components.html

Ingo Lutkebohle Techniken der Projektentwicklung 10

Page 12: Swing Concepts Ingo L¨utkebohle Termin 11iluetkeb/2005/session11.pdf · Swing Concepts Ingo L¨utkebohle Termin 11 Ingo L¨utkebohle Techniken der Projektentwicklung 1. Einleitung

Einleitung Architektur Swing Beispiele Aufgabe Komponenten Layout Neue Komponenten

Wichtige Komponenten: Container

JFrame

JTabbedPane

JPanel JScrollPane

JSplitPane

Bilder aus http://java.sun.com/docs/books/tutorial/uiswing/components/components.html

Ingo Lutkebohle Techniken der Projektentwicklung 11

Page 13: Swing Concepts Ingo L¨utkebohle Termin 11iluetkeb/2005/session11.pdf · Swing Concepts Ingo L¨utkebohle Termin 11 Ingo L¨utkebohle Techniken der Projektentwicklung 1. Einleitung

Einleitung Architektur Swing Beispiele Aufgabe Komponenten Layout Neue Komponenten

Warum Layout-Manager?

Fruher: Manuelle, pixelgenaue Anordnung

Probleme:

Textabmessungen variieren (Font, Sprache)

Dynamische Erzeugung von GUIs

Hoher Anderungsaufwand

In Swing: Relatives Layout

1 Relative grobe Positionsangaben (”zuoberst, rechts von“)

2 Komponenten kennen ihre Große

3 Layout-Manager berechnet den Rest

Ingo Lutkebohle Techniken der Projektentwicklung 12

Page 14: Swing Concepts Ingo L¨utkebohle Termin 11iluetkeb/2005/session11.pdf · Swing Concepts Ingo L¨utkebohle Termin 11 Ingo L¨utkebohle Techniken der Projektentwicklung 1. Einleitung

Einleitung Architektur Swing Beispiele Aufgabe Komponenten Layout Neue Komponenten

BorderLayout

Default fur JFrame ContentPane

Feste Positionen fur jeweils genau eine Komponente

Gibt CENTER allen Platz der nicht sonst benotigt wird

Nicht alle Positionen mussen besetzt werden

http://java.sun.com/docs/books/tutorial/uiswing/layout/border.html

Ingo Lutkebohle Techniken der Projektentwicklung 13

Page 15: Swing Concepts Ingo L¨utkebohle Termin 11iluetkeb/2005/session11.pdf · Swing Concepts Ingo L¨utkebohle Termin 11 Ingo L¨utkebohle Techniken der Projektentwicklung 1. Einleitung

Einleitung Architektur Swing Beispiele Aufgabe Komponenten Layout Neue Komponenten

BoxLayout und Box

Anordnungen:

Vertikal: links → rechtsHorizontal: oben → unten

Beachtet Komponentengroßen

Sehr weit anpassbar

Box-Klasse mit praktischenHilfsfunktionen

Vertikal

1

2

3

Horizontal

21 3

http://java.sun.com/docs/books/tutorial/uiswing/layout/box.html

Ingo Lutkebohle Techniken der Projektentwicklung 14

Page 16: Swing Concepts Ingo L¨utkebohle Termin 11iluetkeb/2005/session11.pdf · Swing Concepts Ingo L¨utkebohle Termin 11 Ingo L¨utkebohle Techniken der Projektentwicklung 1. Einleitung

Einleitung Architektur Swing Beispiele Aufgabe Komponenten Layout Neue Komponenten

Eigene Komponenten

Ableiten von JComponent oder Unterklasse→ JPanel ist ganz praktisch

Muss Zeichenflache selbst verwalten

Kommunikation mit externen Komponenten sollteListener-Konzept folgen

Kann eigene Events/Listener definieren

Ingo Lutkebohle Techniken der Projektentwicklung 15

Page 17: Swing Concepts Ingo L¨utkebohle Termin 11iluetkeb/2005/session11.pdf · Swing Concepts Ingo L¨utkebohle Termin 11 Ingo L¨utkebohle Techniken der Projektentwicklung 1. Einleitung

Einleitung Architektur Swing Beispiele Aufgabe Komponenten Layout Neue Komponenten

Zeichnen auf Anforderung

paintComponent uberladen

Muss jederzeit alles zeichnen konnen

Kann ggfls. kleinere Bereiche zeichnen (“clipping rectangle”)

Zeitkritisch (da im UI-Thread)→ keine großen Berechnungen!

Standardmaßig gepufferte Anzeige (kein “flicker”)

http://java.sun.com/docs/books/tutorial/uiswing/14painting/concepts.html

Ingo Lutkebohle Techniken der Projektentwicklung 16

Page 18: Swing Concepts Ingo L¨utkebohle Termin 11iluetkeb/2005/session11.pdf · Swing Concepts Ingo L¨utkebohle Termin 11 Ingo L¨utkebohle Techniken der Projektentwicklung 1. Einleitung

Einleitung Architektur Swing Beispiele Aufgabe Komponenten Layout Neue Komponenten

Interaktion mit dem Layout-Manager

Große uber setPreferredSizevorgeben

In paintComponent tatsachlicheGroße abfragen

Dokumentation desLayout-Managers fur Spezifikabeachten

Beispielgroßen

ipsum

preferred

minimum

Ingo Lutkebohle Techniken der Projektentwicklung 17

Page 19: Swing Concepts Ingo L¨utkebohle Termin 11iluetkeb/2005/session11.pdf · Swing Concepts Ingo L¨utkebohle Termin 11 Ingo L¨utkebohle Techniken der Projektentwicklung 1. Einleitung

Einleitung Architektur Swing Beispiele Aufgabe Hello World Clickcounter

Hello World

Erzeugen eines Fensters (JFrame)

JLabel zum Anzeigen von Hello World

Anzeigen des Fensters

/vol/tdpe/share/material/session11/HelloWorldSwing.java

Ingo Lutkebohle Techniken der Projektentwicklung 18

Page 20: Swing Concepts Ingo L¨utkebohle Termin 11iluetkeb/2005/session11.pdf · Swing Concepts Ingo L¨utkebohle Termin 11 Ingo L¨utkebohle Techniken der Projektentwicklung 1. Einleitung

Einleitung Architektur Swing Beispiele Aufgabe Hello World Clickcounter

Das Grundgerust

public class HelloWorldSwing { private static void createAndShowGUI() { ... }

public static void main(String[] args) { //Schedule a job for the event-dispatching thread: //creating and showing this application's GUI. javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGUI(); } }); }}

Ingo Lutkebohle Techniken der Projektentwicklung 19

Page 21: Swing Concepts Ingo L¨utkebohle Termin 11iluetkeb/2005/session11.pdf · Swing Concepts Ingo L¨utkebohle Termin 11 Ingo L¨utkebohle Techniken der Projektentwicklung 1. Einleitung

Einleitung Architektur Swing Beispiele Aufgabe Hello World Clickcounter

Fenster erzeugen und anzeigen

public class HelloWorldSwing { /** * Create the GUI and show it. For thread safety, * this method should be invoked from the * event-dispatching thread. */ private static void createAndShowGUI() { //Make sure we have nice window decorations. JFrame.setDefaultLookAndFeelDecorated(true);

//Create and set up the window. JFrame frame = new JFrame("HelloWorldSwing"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

...

//Display the window. frame.pack(); frame.setVisible(true); }}

Ingo Lutkebohle Techniken der Projektentwicklung 20

Page 22: Swing Concepts Ingo L¨utkebohle Termin 11iluetkeb/2005/session11.pdf · Swing Concepts Ingo L¨utkebohle Termin 11 Ingo L¨utkebohle Techniken der Projektentwicklung 1. Einleitung

Einleitung Architektur Swing Beispiele Aufgabe Hello World Clickcounter

Label erzeugen und einbinden

public class HelloWorldSwing { /** * Create the GUI and show it. For thread safety, * this method should be invoked from the * event-dispatching thread. */ private static void createAndShowGUI() {

...

//Add the ubiquitous "Hello World" label. JLabel label = new JLabel("Hello World"); frame.getContentPane().add(label);

//Display the window. frame.pack(); frame.setVisible(true); }}

Ingo Lutkebohle Techniken der Projektentwicklung 21

Page 23: Swing Concepts Ingo L¨utkebohle Termin 11iluetkeb/2005/session11.pdf · Swing Concepts Ingo L¨utkebohle Termin 11 Ingo L¨utkebohle Techniken der Projektentwicklung 1. Einleitung

Einleitung Architektur Swing Beispiele Aufgabe Hello World Clickcounter

Ein Clickcounter

Ein Fenster mit einem Button

Die Clicks auf den Button werden mitgezahlt und angezeigt

/vol/tdpe/share/material/session11/SwingApplication.java

Ingo Lutkebohle Techniken der Projektentwicklung 22

Page 24: Swing Concepts Ingo L¨utkebohle Termin 11iluetkeb/2005/session11.pdf · Swing Concepts Ingo L¨utkebohle Termin 11 Ingo L¨utkebohle Techniken der Projektentwicklung 1. Einleitung

Einleitung Architektur Swing Beispiele Aufgabe Hello World Clickcounter

Das Grundgerust

public class SwingApplication {

public static void main(String[] args) { //Schedule a job for the event-dispatching thread: //creating and showing this application's GUI. javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGUI(); } }); }}

Ingo Lutkebohle Techniken der Projektentwicklung 23

Page 25: Swing Concepts Ingo L¨utkebohle Termin 11iluetkeb/2005/session11.pdf · Swing Concepts Ingo L¨utkebohle Termin 11 Ingo L¨utkebohle Techniken der Projektentwicklung 1. Einleitung

Einleitung Architektur Swing Beispiele Aufgabe Hello World Clickcounter

Fenster und Inhalte erzeugen

private static void createAndShowGUI() { ...

//Create and set up the window. JFrame frame = new JFrame("SwingApplication"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

SwingApplication app = new SwingApplication(); Component contents = app.createComponents(); frame.getContentPane().add(contents, BorderLayout.CENTER);

//Display the window. frame.pack(); frame.setVisible(true); }

Ingo Lutkebohle Techniken der Projektentwicklung 24

Page 26: Swing Concepts Ingo L¨utkebohle Termin 11iluetkeb/2005/session11.pdf · Swing Concepts Ingo L¨utkebohle Termin 11 Ingo L¨utkebohle Techniken der Projektentwicklung 1. Einleitung

Einleitung Architektur Swing Beispiele Aufgabe Hello World Clickcounter

Ein einfaches GridLayout

private static String labelPrefix="Number of button clicks: ";final JLabel label = new JLabel(labelPrefix + "0 ");

public Component createComponents() { JButton button = new JButton("I'm a Swing button!"); button.setMnemonic(KeyEvent.VK_I); button.addActionListener(this); label.setLabelFor(button);

JPanel pane = new JPanel(new GridLayout(0, 1)); pane.add(button); pane.add(label); pane.setBorder( BorderFactory.createEmptyBorder(30, 30, 10, 30)); return pane;}

Ingo Lutkebohle Techniken der Projektentwicklung 25

Page 27: Swing Concepts Ingo L¨utkebohle Termin 11iluetkeb/2005/session11.pdf · Swing Concepts Ingo L¨utkebohle Termin 11 Ingo L¨utkebohle Techniken der Projektentwicklung 1. Einleitung

Einleitung Architektur Swing Beispiele Aufgabe Hello World Clickcounter

EventListener

public class SwingApplication implements ActionListener {

public void actionPerformed(ActionEvent e) { numClicks++; label.setText(labelPrefix + numClicks); }}

Ingo Lutkebohle Techniken der Projektentwicklung 26

Page 28: Swing Concepts Ingo L¨utkebohle Termin 11iluetkeb/2005/session11.pdf · Swing Concepts Ingo L¨utkebohle Termin 11 Ingo L¨utkebohle Techniken der Projektentwicklung 1. Einleitung

Einleitung Architektur Swing Beispiele Aufgabe

Aufgabe fur zwei Wochen

Ingo Lutkebohle Techniken der Projektentwicklung 27

Page 29: Swing Concepts Ingo L¨utkebohle Termin 11iluetkeb/2005/session11.pdf · Swing Concepts Ingo L¨utkebohle Termin 11 Ingo L¨utkebohle Techniken der Projektentwicklung 1. Einleitung

Einleitung Architektur Swing Beispiele Aufgabe

Aufgabe fur zwei Wochen

Ein Zeichenprogramm

Funktionen:

Zeichnen vor Linien, Rechtecken, Ellipsen mit der MausJe in mindest drei verschiedenen FarbenDer Benutzer kann Schritte ruckgangig machen (UnDo)Der Benutzer kann geloschte Formen wieder einblenden(ReDo)

Ingo Lutkebohle Techniken der Projektentwicklung 28

Page 30: Swing Concepts Ingo L¨utkebohle Termin 11iluetkeb/2005/session11.pdf · Swing Concepts Ingo L¨utkebohle Termin 11 Ingo L¨utkebohle Techniken der Projektentwicklung 1. Einleitung

Einleitung Architektur Swing Beispiele Aufgabe

Aufgabe fur zwei Wochen

Abgabe: Quellcode und ausfuhrbares Programm

Unter: /vol/tdpe/groupX/session11/teamY/

Bearbeitung zu zweit

Zeit: zwei Wochen

Ingo Lutkebohle Techniken der Projektentwicklung 29