Programmieren mit JAVA Teil VI Zusammenfassung • • • • Applikation vs. Applet objektorientierte Programmierung Sprachbestandteile AWT Erzeugen einer grafischen Benutzungsoberfläche • bis JDK 1.1 per AWT • seit JAVA 2 per JFC/Swing • JFC ist die Abkürzung für Java Foundation Classes • Sammlung von Klassen speziell für den Aufbau von Benutzungsoberflächen • erstmals vorgestellt 1997 Features der JFC • The Swing Components • Pluggable Look and Feel Support • Accessibility API • Java 2D API (Java 2 Platform only) • Drag and Drop Support (Java 2 Platform only) Warum Swing ... ... und nicht AWT? • Swing benutzt keinen native code!! • Swing Button und Labels können auch Bilder anstelle von oder zusätzlich zu Text darstellen. • Swing Komponenten müssen nicht rechteckig sein. Buttons können z.B. rund sein. • Ein einfacher Zugriff auf Bildschirmelemente erlaubt z.B. einer Braille Anzeige das Auslesen einer Textbox oder der Beschriftung eines Buttons oder Labels. Eine einfache Swing Anwendung import javax.swing.*; import java.awt.*; public class HelloSwingApplet extends JApplet { public void init() { JLabel label = new JLabel("You are successfully running a Swing applet!"); label.setHorizontalAlignment(JLabel.CENTER); label.setBorder(BorderFactory.createMatteBorder(1,1,2,2,C olor.black)); getContentPane().add(label, BorderLayout.CENTER); } } Top Level Container Dialog Frame allgemein nutzbare Komponenten Panel Scroll pane Toolbar Split pane Tabbed pane spezielle Container Internal frame Layered pane Root pane Dialogelemente • • • • • • • • • Schaltflächen Label Checkboxen (Kontrollkästchen) Radiobutton (Optionsfelder) Auswahlmenüs Listenfelder Textbereiche und Textfelder Schieber und Bildlaufleisten eigene Dialogelemente allgemeine Dialogelemente Buttons Combo box List Menu Slider Textfield unveränderbare Informationsanzeigen Label Progress bar Tool tip editierbare Anzeigen formatierter Informationen Color chooser Table File chooser Text Tree Ereignis Behandlung (Event Handling) Aktion, die ein Ereignis auslöst Listener Typ User klickt auf einen Button, drückt Return während er in ein Textfeld schreibt oder ActionListener wählt einen Menüeintrag aus User schliesst einen frame (main window) WindowListener User drückt eine Maustaste während sich MouseListener der Cursor über einer Komponente befindet User bewegt die Maus über eine Komponente MouseMotionListener Komponente wird sichtbar ComponentListener Komponente erhält den Tastatur Fokus FocusListener Tabellen- oder Listenauswhl ändert sich ListSelectionListener Ereignis Behandlung II Mehrere listener können sich registrieren, um bei Ereignissen von einem bestimmten Typ und einer bestimmten Quelle benachrichtigt zu werden. Implementierung der Ereignis Behandlung Jeder Event Handler benötigt 3 Codestücke: In der Deklaration für die Event Handler Klasse Code, der spezifiziert, dass die Klasse entweder ein Listener Interface implementiert oder von einer Klasse erbt, die das Listener Interface implementiert hat. Zum Beispiel: public class MyClass implements ActionListener { Code, der eine Instanz des Event Handlers als Listener für eine oder mehrere Komponenten registriert. Zum Beispiel: someComponent.addActionListener(instanceOfMyClass); Implementierung der Ereignis Behandlung II Code, der eine Methode des Listener Interfaces implementiert. Zum Beispiel: public void actionPerformed(ActionEvent e) { ...//code that reacts to the action... } Ereignis Behandlung Ein Beispiel JButton button = new JButton("I'm a Swing button!"); button.setMnemonic(KeyEvent.VK_I); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { numClicks++; label.setText(labelPrefix + numClicks); } });