Java – Swing Vortrag von Raphaela Wrede und Anja Jentzsch Gliederung: 1. Einleitung 2. Vergleich von AWT und Swing 3. Container 4. Applikationsgerüst / Event Listener 5. Widgets 6. Beispielprogramm 1. Einleitung - bei den ersten Java-Versionen Beschwerden über das AWT - Swing ist effektive Antwort auf diese Kritik Weiterentwicklung des AWT • Swing ist Teil der JFC (Java Foundation Classes) neue Bibliothek mit ausgefeiltem System zur Erstellung grafischer Benutzerschnittstellen/ oberflächen die Designstategie Model-View-Controller (MVC) wurde benutzt 2. Vergleich von AWT und Swing Vorteile von Swing: • wichtigstes Feature: Pluggable Look-And-Feel • Swing-Komponenten sind komplett in Java implementiert bessere Kompatibilität zwischen den Programmen über unterschiedliche Plattformen hinweg • Swing hat doppelt so viele Komponenten wie das AWT komfortableres Programmieren, viele sog. „widgets“ wie z.B. Standarddialoge 2. Vergleich von AWT und Swing Wichtige Merkmale: • zu jeder AWT-Komponente des AWT gibt es entsprechende Swing-Komponenten, diese beginnen mit J- z.B. JButton statt Button • zusätzlich ein neues Set an Komponenten • Swing-Komponenten sind alle Subklassen der Klasse Jcomponent • alle Elemente von Swing sind Bestandteil des Paketes javax.swing • Vererbungsunterschiede zwischen AWT und Swing (siehe Diagramm) 2. Vergleich von AWT und Swing Gliederung der Swing-Elemente in: 1. Kontrollelemente/Komponenten 2. Container 3. LayoutManager 4. Events 2. Vergleich von AWT und Swing AWT 2. Vergleich von AWT und Swing Swing 3. Container - Container Klassen dienen dazu, Komponenten zu gruppieren, anzuordnen und als eine einzelne Einheit zu behandeln - zur Anordnung der Elemente am Bildschirm hat jeder Container einen Layout Manager zugeordnet - Swing unterscheidet 2 Klassen von Containern: • Top-level Container • Intermediate-level Container 3. Container Top-Level Container • JFrame: Klasse für ein Fenster mit Rahmen, Titel und Icons zum Schließen des Fensters • JDialog: Klasse für ein sehr allgemeines Dialogfenster • JApplet: Klasse für Applets - jedes Programm, welches Swing für das GUI verwendet, hat mindestens einen top-level Container -> Wurzel der Containment-Hierarchie 3. Container Intermediate-level Container • JPanel: wichtigste und flexibelste Panel-Klasse • JScrollPane: ähnl. JPanel mit Scrollbars • JTabbedPane: unterstützt Darstellung mehrerer Panels, wobei jeweils nur einer ausgewählt ist • JToolBar: enthält eine Gruppe von Elementen in einer Zeile oder Spalte - intermediate-level Container dienen zur Gruppierung und Anordnung von Elementen 4. Applikationsgerüst 1: import java.awt.event.*; 2: import javax.swing.*; 3: 4: public class Framework extends JFrame { 5: public Framework() { 6: super("Application Title"); 7: // Hier die Komponenten einfügen 8: } 9: 10: public static void main(String[] args) { 11: JFrame frame = new Framework(); 12: 13: WindowListener l = new WindowAdapter() { 14: public void windowClosing(WindowEvent e) { 15: System.exit(0); 16: } 17: }; 18: frame.addWindowListener(l); 19: 20: frame.setVisible(true); 21: } 22: } 4. Event Listener • • • • • • • ActionListener: Aktionsereignisse, durch Benutzer ausgelöst AdjustmentListener FocusListener ItemListener KeyListener: Tastaturereignisse; werden erzeugt, wenn Benutzer Text über die Tastatur eingibt MouseListener: Mausereignisse (bei Mausklick, Betreten oder Verlassen einer Komponente) MouseMotionListener: Mausereignisse bei Bewegung der Maus über eine Komponente WindowListener: Ereignisse, die von Fenstern erzeugt werden, wenn sie maximiert, minimiert, verschoben oder geschlossen werden 4. Event Listener - Paket java.awt.event beinhaltet alle Event Listener - die folgende Klasse ist so deklariert, dass sie sowohl Aktions- als auch Textereignisse behandeln kann: public class Suspense extends JFrame implements ActionListener, TextListener { // ... } - es muß die Methode addActionListener() für jede Komponente aufgerufen werden, die ein Aktionsereignis erzeugt - erst einer Komponente Listener hinzufügen und alle anderen Konfigurationen vornehmen, bevor diese in irgendeinen Container einfügt wird 4. Event Listener - getSource()-Methode verwenden, um das Objekt zu ermitteln, das ein Ereignis erzeugt hat - getActionCommand() verwenden, um mehr Informationen über die Quelle eines Ereignisses zu erhalten JButton sort = new JButton("Sort"); sort.setActionCommand("Sort Files"); 5. Widgets 1 JScrollPane: JPasswordField: JTextPane: JEditorPane: 5. Widgets 2 JScrollBar: JSlider: JProgressBar: JComboBox: 5. Widgets 3 JList: JMenu: JList mit Grafiken: 5. Widgets 4 JPopupMenu: JTree / JSplitPane: JSeperator: BoxLayout: 5. Widgets 4 JTabbedPane: JColorChooser: 6. Beispielprogramm JTabbedPane JTabbedPane: • Teilung der Benutzerschnittstelle in gleich große Fenster • Auswahl über Reiter (Tabs) JTabbedPane contentPanel= new JTabbedPane(); cp,cp1 = new JPanel(); […] contentPanel.add("HauptFeatures",cp); contentPanel.add("JTree",cp1); setContentPane(contentPanel); 6. Beispielprogramm JButton JButton: • sendet ActionEvent beim Drücken JButton b1 = new JButton("Metal"); b1.addActionListener(this); //zum JPanel hinzufügen aPanel.add(b1); 6. Beispielprogramm ToolTips & HotKeys JToolTip: • Alle Komponenten können kontextsensitive Hinweise anzeigen b1.setToolTipText("Auf Metal umstellen"); HotKey / Mnemonic: • Alt + HotKey b1.setMnemonic('m'); 6. Beispielprogramm Pluggable Look and Feel • Gibt die Darstellungsform der Komponenten vor • Zur Laufzeit änderbar UIManager.setLookAndFeel(„javax.swing.plaf. metal.MetalLookAndFeel“); UIManager.setLookAndFeel(„com.sun.java.swing .plaf.windows.WindowsLookAndFeel“); UIManager.setLookAndFeel(„com.sun.java.swing .plaf.motif.MotifLookAndFeel“); SwingUtilities.updateComponentTreeUI(this. getContentPane()); 6. Beispielprogramm JOptionPane JOptionPane: • bietet sich für typische Dialoge an • Meldungsarten: allgemeine Meldung, Fehlermeldung, Informationsmledung, Frage, Warnung JOptionPane.showMessageDialog(cp, "Mac Benutzeroberfläche ist auf Windows nicht verfügbar!", "Mac-UI", JOptionPane.ERROR_MESSAGE); 6. Beispielprogramm JFileChooser JFileChooser: • zur Dateiauswahl JFileChooser fc = new JFileChooser(); fc.setCurrentDirectory(new File("C:\\Programme")); fc.showOpenDialog(this); 6. Beispielprogramm MouseListener / MouseMotionListener mouseEntered(MouseEvent e) mousePressed(MouseEvent e) mouseClicked(MouseEvent e) mouseExited(MouseEvent e) mouseReleased(MouseEvent e) 6. Beispielprogramm JTree JTree tree = new JTree(); DefaultMutableTreeNode root = new DefaultMutableTreeNode("Menü"); DefaultMutableTreeNode swing = new DefaultMutableTreeNode("Swing"); […] DefaultMutableTreeNode jbutton = new DefaultMutableTreeNode(„JButton“); […] root.add(swing); swing.add(jbutton); Tutorials http://java.sun.com/docs/books/tutorial/uiswing http://www.galileocomputing.de/openbook/javainsel/java-16.htm