Client-Server-Anwendungen Programmierung graphischer Benutzeroberflächen Ereignisorientierung, Model-View-Control • Aktionen lösen Ereignisse aus (Control) • Ereignisse führen zur Verarbeitung der eingegebenen Daten (Model) • Ergebnisse werden in der GUI sichtbar gemacht (View) Client-Server-Anwendungen • • • • • Webanwendungen (HTML-Oberflächen für Clients) Thin Client Graphische Benutzeroberfläche, Smart Client Unterschiedlich ausgeprägte lokale Rich Client Verarbeitung Fat Client Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009) Typische Aktionen: • Ein Button (Knopf) wird gedrückt • Ein Text wird in ein Textfeld eingegeben • Eine Checkbox wird angewählt • … 126 Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009) 127 Swing-Dialogelemente (Beispiele) Programmierung graphischer Benutzeroberflächen Graphical User Interfaces (GUIs) • • • AWT (Abstract Windowing Toolkit) SWT (Standard Widget Toolkit) Swing (Widget Toolkit, Java) java.awt.* javax.swing.* Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009) 128 Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009) 129 Einige Swing-Dialogelemente Swing-Dialogelemente (Beispiele) JFrame … getContentPane().setLayout(null); setPreferredSize(new java.awt.Dimension(267, 231)); setTitle("Mehrwertsteuer"); setResizable(false); getContentPane().setBackground( new java.awt.Color(230,230,255)); this.setFont(new java.awt.Font("Arial",0,9)); { Nettobetrag = new JLabel(); getContentPane().add(Nettobetrag, new AnchorConstraint(113, 329, 238, 75, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL)); Nettobetrag.setText("Nettobetrag"); Nettobetrag.setBounds(20, 22, 112, 25); } … JDialog JTextField JTextField nicht editierbar JLabel JButton Typischerweise sind Buttons (Knöpfe) als ActionListener registriert Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009) 130 Swing-Dialogelemente (Beispiele) 131 Swing-Dialogelemente (Beispiele) … { Berechnen = new JButton(); AnchorLayout BerechnenLayout = new AnchorLayout(); Berechnen.setLayout(BerechnenLayout); getContentPane().add(Berechnen, new AnchorConstraint(766, 472, 871, 75, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL)); Berechnen.setText("Berechnen"); Berechnen.setPreferredSize( new java.awt.Dimension(108, 21)); Berechnen.setBounds(20, 152, 108, 21); Berechnen.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { BerechnenActionPerformed(evt); } }); } … Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009) Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009) Programmierung der GUI: • Graphischer Editor Programmierung der fachlichen Berechnungen: • Manuell Berechnen.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { BerechnenActionPerformed(evt); } }); } … 132 Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009) 133 Interessante Systemschnittstellen (aus java.awt.event) ActionListener AdjustmentListener AWTEventListener ComponentListener ContainerListener FocusListener HierarchyBoundsListener HierarchyListener InputMethodListener ItemListener KeyListener Interessante Systemschnittstellen (aus java.awt.event) MouseListener MouseMotionListener MouseWheelListener TextListener WindowFocusListener WindowListener WindowStateListener Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009) ActionListener Interface aus java.awt.event Zu implementierende Methoden: void actionPerformed(ActionEvent e) Invoked when an action occurs. Typische actions: • Ein Button (Knopf) wird gedrückt • Ein Text wird in ein Textfeld eingegeben • Eine Checkbox wird angewählt • … Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009) 134 Swing-Dialogelemente (Beispiele) 135 Klassenschachtelung: Anonyme innere Klassen Programmierung der GUI: • Graphischer Editor Allgemein: Programmierung der fachlichen Berechnungen: • Manuell new KlasseOderSchnittstelle() { /* Eigenschaften der inneren Klasse */ } entspricht class Anonymous extends Klasse { … } Berechnen.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { BerechnenActionPerformed(evt); } }); } … Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009) oder class Anonymous implements Schnittstelle { … } 136 Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009) 137 Klassenschachtelung: Anonyme innere Klassen Swing-Dialogelemente (Beispiele) Berechnen.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { BerechnenActionPerformed(evt); } } ); } Programmierung der GUI: • Graphischer Editor Programmierung der fachlichen Berechnungen: • Manuell entspricht class Anonymous implements ActionsListener { public void actionPerformed(ActionEvent evt) { BerechnenActionPerformed(evt); } } Berechnen.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { BerechnenActionPerformed(evt); } }); } … BerechnenBerechnen.addActionListener(new Anonymous()); Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009) 138 Eclipse GUI-Editoren http://wiki.computerwoche.de/doku.php/programmierung/gui-builder_fuer_eclipse Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009) 140 Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009) 139