GUI Programmierung in Java Branimir Djordjevic GUI Wichtige
GUI Programmierung in Java Branimir Djordjevic
GUI - Wichtige Begriffe Die Swing-Bibliothek in Java stellt zum Beispiel die folgenden Windows zur Verfügung: JFrame für ein Hauptfenster JDialog für ein Dialogfenster. JApplet für eine WWW-Browser-Anwendung. Ein Content. Pane eines Windows dient zur Aufnahme von Komponenten wie Textzeilen Anordnung mit Hilfe eines Layout. Manager. Behandlung von Ereignissen Event. Listener
GUI - Konzepte JLabel JList JText. Field JButton List. Selection Listener Action. Handler Definition von Event Listener und Zuordnung zu Komponenten
GUI - Bibliotheken in Java Nötige „Import-Anweisungen: import java. awt. *; import java. awt. event. *; import javax. swing. event. *; . . . • • • Das Abstract Window Toolkit (AWT) ist die Basis für alle grafischen Anwendungen. Swing erweitert das AWT und enthält modernisierte Klassen für einige AWT-Klassen (J. . . ) Achtung: Swing ist in den meisten WWW-Browsern nicht verfügbar!
GUI - Erzeugung eines Frames class Main. Window extends JFrame { JPanel content. Pane; // Hier Deklaration aller Komponenten. . . public Main. Window() { content. Pane = (JPanel) get. Content. Pane(); // Hier Window aufbauen. . . } public static void main(String[] args) { // Hier Objekt erzeugen und Parameter setzen // zum Beispiel: Main. Window frame = new Main. Window(); frame. set. Title("Test"); frame. set. Size(new Dimension(250, 300)); frame. set. Visible(true); }}
GUI - Das Layout Flow. Layout Anordnung von links nach rechts und von oben nach unten. Box. Layout Anordnung entweder horizontal oder vertikal. Border. Layout Anordnung in bis zu 5 Bereichen "North", "South", "East", "West" und "Center" Grid. Layout, Grid. Bag. Layout Anordnung der Komponenten in einer Matrix. Card. Layout Anordnung von Komponenten auf alternativen Darstellungsbereichen.
GUI - Kombination mit JPanels und Layouts - Ü Content. Pane mit Border. Layout (hier: West, Center, South) Ü JPanel mit vertikalem Box. Layout Ü JPanel mit horizontalem Box. Layout
GUI - Definition class Stunden. Auflistung extends JFrame { JPanel content. Pane, pan. Bezeichnung = new JPanel(), pan. Stunden = new JPanel(), pan. Vorlesung = new JPanel(), pan. Button = new JPanel(); JText. Field tf. Bezeichnung = new JText. Field(10), tf. Stunden = new JText. Field(2); JLabel lab. Bezeichnung = new JLabel("Bezeichnung: "), lab. Stunden = new JLabel("Stunden: "); JButton but. Speichern = new JButton("Speichern"), but. Abbrechen = new JButton("Abbrechen"); Default. List. Model dlm = new Default. List. Model(); JList auswahl = new JList(dlm);
GUI - Beispiel mit Horizontalem Box Layout pan. Bezeichnung. set. Layout(new Box. Layout(pan. Bezeichnung, Box. Layout. X_AXIS)); pan. Bezeichnung. add( Box. create. Rigid. Area(new Dimension(5, 0))); pan. Bezeichnung. add(lab. Bezeichnung); pan. Bezeichnung. add(Box. create. Horizontal. Glue()); tf. Bezeichnung. set. Maximum. Size(new Dimension(80, 15)); pan. Bezeichnung. add(tf. Bezeichnung); pan. Stunden. set. Layout(new Box. Layout(pan. Stunden, Box. Layout. X_AXIS)); pan. Stunden. add( Box. create. Rigid. Area(new Dimension(5, 0))); pan. Stunden. add(lab. Stunden); pan. Stunden. add(Box. create. Horizontal. Glue()); tf. Stunden. set. Maximum. Size(new Dimension(25, 15)); pan. Stunden. add(tf. Stunden);
GUI - Bereiche mit verschiedenen Box Layouts pan. Vorlesung. set. Layout( new Box. Layout(pan. Vorlesung, Box. Layout. Y_AXIS)); pan. Vorlesung. add(pan. Bezeichnung); pan. Vorlesung. add(pan. Stunden); pan. Button. set. Layout( new Box. Layout(pan. Button, Box. Layout. X_AXIS)); pan. Button. add(but. Speichern); pan. Button. add(Box. create. Horizontal. Glue()); pan. Button. add(but. Abbrechen);
GUI - Beispiel: Bereich mit Border. Layout content. Pane = (JPanel) get. Content. Pane(); content. Pane. set. Layout(new Border. Layout()); content. Pane. add(auswahl, Border. Layout. WEST); content. Pane. add(pan. Vorlesung, Border. Layout. CENTER); content. Pane. add(pan. Button, Border. Layout. SOUTH);
GUI- Größe von Komponenten Beeinflussung der Größe von Komponenten mit den folgenden Methoden: set. Preferred. Size(Dimension d) set. Minimum. Size(Dimension d) set. Maximum. Size(Dimension d) Nicht alle Layouts berücksichtigen diese Angaben vollständig: vollständige Berücksichtigung durch das Box. Layout teilweise Berücksichtigung durch das Border. Layout keine Berücksichtigung durch das Grid. Layout
Übung
GUI – Event. Listener Mit einem Event. Listener lassen sich Aktionen für verschiedene Ereignisse zuordnen, wie zum Beispiel: Mausklick oder Mausbewegung Auswahl eines Elements aus einem Menü Aktionen auf einem Window (Verschieben, Beenden) Ein Event. Listener ist ein Objekt einer durch den Anwender implementierten Klasse. Eine Klasse für einen Event. Listener: stellt Methoden zur Verarbeitung von Ereignissen zur Verfügung und implementiert damit ein Interface. wird als innere Klasse einer Window-Klasse definiert.
GUI - Beispiel für einen Action. Listener class Speichern. Listener implements Action. Listener { public void action. Performed(Action. Event e) {. . . } }); but. Speichern. add. Action. Listener( new Speichern. Listener());
GUI - Elemente der Definition eines Listener Welches Interface wird implementiert? Action. Listener, List. Selection. Listener, Window. Listener, . . . Welche Methoden müssen für ein Interface implementiert werden? Action. Listener: action. Performed(Action. Event) List. Selection. Listener: value. Changed(List. Selection. Event) Window. Listener: window. Opened(Window. Event), . . . Adapter statt Listener mit vordefinierten Methoden
GUI - Definition eines anonymen Action. Listener I but. Speichern. add. Action. Listener(new Action. Listener() { public void action. Performed(Action. Event e) { Vorlesung v = (Vorlesung) auswahl. get. Selected. Value(); v. set. Bezeichnung(tf. Bezeichnung. get. Text()); try { v. set. Stunden( Integer. parse. Int(tf. Stunden. get. Text())); } catch (Number. Format. Exception ex) { tf. Stunden. set. Text(v. get. Stunden() + ""); } } });
GUI - Definition eines anonymen Action. Listener II but. Abbrechen. add. Action. Listener(new Action. Listener() { public void action. Performed(Action. Event e) { Vorlesung v = (Vorlesung) auswahl. get. Selected. Value(); tf. Bezeichnung. set. Text(v. get. Bezeichnung()); tf. Stunden. set. Text(v. get. Stunden() + ""); } });
GUI - Beispiel für einen List. Selection. Listener auswahl. add. List. Selection. Listener( new List. Selection. Listener() { public void value. Changed(List. Selection. Event e) { Vorlesung v = (Vorlesung) auswahl. get. Selected. Value(); tf. Bezeichnung. set. Text(v. get. Bezeichnung()); tf. Stunden. set. Text(v. get. Stunden() + ""); } });
GUI - Beispiel für einen Window. Adapter public static void main(String[] args) { Vorlesung. Editor frame = new Vorlesung. Editor(); frame. set. Title("Vorlesung Editor"); frame. add. Window. Listener(new Window. Adapter() { public void window. Closing(Window. Event e) { System. exit(0); } }); frame. pack(); frame. set. Visible(true); }
GUI - JList: Allgemeines Ein JList repräsentiert eine Auswahlliste Eine JList enthält die auszuwählenden Elemente in einem Objekt der Klasse List. Model Konstruktor: JList. Model(List. Model) Wert ändern: set. Selected. Value(int) Wert abfragen: get. Selected. Value() get. Selected. Values() Listener: List. Selection. Listener()
GUI - JList: Beispiel Default. List. Model my. Model = new Default. List. Model(); my. Model. add. Element(new Vorlesung("DBS", 4)); my. Model. add. Element(new Vorlesung("Java", 4)); . . . JList my. List = new JList(my. Model); my. List. add. List. Selection. Listener( new List. Selection. Listener() { public void value. Changed(List. Selection. Event e) { Object[] objs = my. List. get. Selected. Values(); . . . } });
Übung
Ende
- Slides: 24