Sommersemester 2004 Jan Drewnak Entwicklung und Einsatz von Geosoftware I Praktikum Sitzung 7 Sitzung 7: User Interfaces in Java
User Interfaces in Java 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
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
User Interfaces in Java Swing Components Top Level Container Intermediate Container JFrame.getContentPane() Components
User Interfaces in Java Swing Components Tutorial
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); }
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); }
User Interfaces in Java Beispiel für eine GUI mit Swing
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 Standard- Verhalten definieren und für eigene Event-Behandlungen spezialisiert werden können
User Interfaces in Java Java Event Handling – Prinzip 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 MouseListener KeyListener Die Listener-Klassen einer Komponente fangen Events auf und reagieren auf sie WindowListener
User Interfaces in Java Java Event Handling Ein Listener für einen Button: Listener werden idR. als interne Klassen von Frames realisiert. 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()); …
User Interfaces in Java Java Event Handling Ein Listener für das Schließen des Fensters: Einsatz von Adaptern erspart die sonst notwendige Implementierung des Interfaces. 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()); …
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 Methoden- signaturen und Attribute) sollte in der nächsten Sitzung stehen. In der nächsten Aufgabe wird dann das fehlende V in MVC ergänzt…