Praktikum Entwicklung und Einsatz von Geosoftware I • Sitzung 7: User Interfaces in Java Sommersemester 2004 Jan Drewnak 15.06.2004 Sitzung 7 Input/Output in Java • View und Controller der GUI-Komponenten erscheinen dem Anwender als Einheit • package java.io: allg. Datenströme • package java.awt: alte GUI-Komponenten (“abstract window toolkit“) • package javax.swing: neue GUI-Komponenten • package java.awt.event: Event-Handling 15.06.2004 User Interfaces in Java GUI-Konzepte in Java • Container (Frame, Panel, Window): nehmen alle Komponenten auf sind selbst Komponenten, können also verschachtelt werden sind für Darstellung der Components zuständig • Components: Steuerelemente (Buttons, Menus & MenuItems) Editierbare Informationen (TextFields, TextAreas) Nicht-editierbare Informationen (Lists, CheckBoxes, Choices) Zeichenflächen (Canvas) • LayoutManager (FlowLayout, GridLayout,...): werden Containern zugewiesen sind für die Anordnung der Components zuständig • EventHandling-Klassen (Listener, Events): Interaktion des AWT-Threads mit dem restlichen Programm 15.06.2004 User Interfaces in Java Swing Components Top Level Container Intermediate Container JFrame.getContentPane() Components 15.06.2004 User Interfaces in Java Swing Components Tutorial 15.06.2004 User Interfaces in Java Beispiel für eine GUI mit Swing import … class GISFrame extends JFrame { GISFrame(String s) { super(s); // get Container Container contentPane = getContentPane(); // use a layout contentPane.setLayout (new GridLayout(0,1)); // create & add atomic component: JButton button1 = new JButton("click1"); contentPane.add(button1); // Menu is set directly to the frame: JMenuBar mBar = new JMenuBar(); JMenu fileMenu = new JMenu("File"); JMenuItem itemNew = new JMenuItem("New"); fileMenu.add(itemNew); mBar.add(fileMenu); setJMenuBar(mBar); } } 15.06.2004 User Interfaces in Java Beispiel für eine GUI mit Swing public class TestGUI { public static void main(String[] args) { GISFrame testFrame = new GISFrame("TestGUI"); testFrame.pack(); testFrame.setVisible(true); } } 15.06.2004 User Interfaces in Java Beispiel für eine GUI mit Swing 15.06.2004 User Interfaces in Java Java Event Handling • Die Art der Behandlung der typischen Events ist durch entsprechende AWT-Interface-Klassen vorgegeben (MouseListener, TextListener. Hier wird also dynamische Bindung intensiv genutzt. • Für die eigenen Event-Behandlungen müssen diese Interfaces implementiert werden. • Adapter-Klassen sind Hilfsklassen, die ein StandardVerhalten definieren und für eigene Event-Behandlungen spezialisiert werden können 15.06.2004 User Interfaces in Java Java Event Handling – Prinzip WindowListener MouseListener 1. Betriebssystem sendet ein Ereignis (Mausklick links, Enter-Taste, Fenster schließen...) an die aktuell fokussierte Anwendung (unser Java-Programm) 2. Anwendung sendet das Ereignis an die betroffene Komponente weiter (Button, MenuBar, ...) 3. Komponente informiert alle registrierten Listener über das Ereignis 15.06.2004 User Interfaces in Java KeyListener Die Listener-Klassen einer Komponente fangen Events auf und reagieren auf sie Java Event Handling • Ein Listener für einen Button: class GISButtonListener implements ActionListener { public void actionPerformed(ActionEvent e) { System.out.println("test") ; } } … // und so wird dieser im Frame an den Button gehängt: button1.addActionListener(new GISButtonListener()); … • Listener werden idR. als interne Klassen von Frames realisiert. 15.06.2004 User Interfaces in Java Java Event Handling • Ein Listener für das Schließen des Fensters: class GISWindowListener extends WindowAdapter { public void windowClosing(WindowEvent e) { System.exit(0); } } … // und so wird dieser an den Frame gehängt: testFrame.addWindowListener(new GISWindowListener()); … • Einsatz von Adaptern erspart die sonst notwendige Implementierung des Interfaces. 15.06.2004 User Interfaces in Java Zu Aufgabe 5 • Bilden Sie 2-er Gruppen • Zusammenführen der TestGUI • Überlegen Sie genau, wie das Design der Klasse Model aussehen muss – dokumentieren Sie den Code ausreichend ! Das Design der Klasse Model (= die Methodensignaturen und Attribute) sollte in der nächsten Sitzung „stehen“. • In der nächsten Aufgabe wird dann das fehlende V in MVC ergänzt… 15.06.2004 User Interfaces in Java