Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "Java Swing Prof. Dr. Bernhard Humm Hochschule Darmstadt – University of Applied Sciences Wintersemester 2006/2007 CNAM Praktikum Systementwicklung."—  Präsentation transkript:

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

2 GUIs Java Swing GUI-Statik GUI-Dynamik Referenzen Seite 2 Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/ GUIs Agenda

3 Seite 3 Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/07., , Grafische Benutzeroberflächen (GUIs) Dialog stammt aus ARRIBA 8.0 der RIB Software AG (www.rib.de) GUIs

4 Seite 4 Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/07., , Bausteine für das Dialoglayout (Bibliothek) Kopfzeile DateiBearbeitenAnsichtHilfe Wert Feld Button Teildialog Reiter Spalte U A A A V GUIs

5 Java Swing GUI-Statik GUI-Dynamik Referenzen Seite 5 Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/ Java Swing Agenda

6 Seite 6 Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/07., , 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

7 GUIs Java Swing GUI-Statik GUI-Dynamik Referenzen Seite 7 Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/ GUI-Statik Agenda

8 Seite 8 Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/07., , 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

9 Seite 9 Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/07., , Das Fenster füllen: statisches GUI-Layout GUI-Statik

10 Seite 10 Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/07., , 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

11 Seite 11 Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/07., , 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

12 Seite 12 Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/07., , 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

13 Seite 13 Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/07., , 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

14 Seite 14 Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/07., , 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

15 Seite 15 Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/07., , 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

16 GUIs Java Swing GUI-Statik GUI-Dynamik Referenzen Seite 16 Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/ GUI-Dynamik Agenda

17 Seite 17 Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/07., , 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

18 Seite 18 Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/07., , 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

19 Seite 19 Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/07., , 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

20 Seite 20 Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/07., , 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

21 Seite 21 Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/07., , 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

22 Seite 22 Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/07., , 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

23 Seite 23 Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/07., , 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

24 GUIs Java Swing GUI-Statik GUI-Dynamik Referenzen Seite 24 Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/ Referenzen Agenda

25 Seite 25 Hochschule Darmstadt – University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. WS 06/07., , Zum Weiterlesen Guido Krüger, Handbuch der Java-Programmierung, Kapitel Referenzen


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

Ähnliche Präsentationen


Google-Anzeigen