8 | Oberflächenprogrammierung |
Man kann seit Java 1.2 auf zwei verschiedene Weisen Oberflächen programmieren. Entweder man setzt das native Abstract Window Toolkit (AWT) ein, welches die Oberflächenkomponenten des Betriebssystems benutzt, oder die in reinem Java programmierte Swing-Bibliothek.
Die Verwendung von nativen Oberflächenelementen hat jedoch verschiedene Nachteile zu Tage gebracht:Um eine plattformunabhängige und flexible Lösung zu bekommen, begann Sun mit der Entwicklung von Oberflächenkomponenten, die selbst in Java programmiert wurden. Unter dem Namen Swing sind die Klassen seit Java 1.2 in die Standardbibliothek aufgenommen, wobei eine etwas veraltete Version auch für Java 1.1 verfügbar ist.
- Aufgrund der Plattformunabhängigkeit konnte nur eine begrenzte Anzahl von Elementen zur Verfügung gestellt werden, die von allen Plattformen angeboten werden. Komplexere Oberflächenelemente wie Bäume oder Tabellen mussten selbst programmiert werden.
- Die Größe der eingebundenen Elemente variiert zwischen den Plattformen. Eine native Textbox, welche auf Windows den Text optimal darstellt, kann unter Unix zu klein sein.
- Die nativen Komponenten sind nicht erweiterbar.
Da hier alle Elemente von Java selbst gezeichnet werden müssen, ist die Performance im Vergleich zum nativen AWT natürlich schlechter. Durch die Verwendung optimierter Just-in-Time-Technologie und schnellerer CPUs ist dieser Nachteil aber inzwischen fast wettgemacht.
Tabelle 8.1 zeigt im Überblick, welche Komponenten bei Swing und beim AWT verfügbar sind. Es ist sofort ersichtlich, dass Swing deutlich mehr Komponenten bietet. Der Grund dafür sind die erwähnten Plattformabhängigkeiten beim AWT.
Tabelle 8.1: Die Komponenten von Swing und AWT im Vergleich Oberflächenelement Swing AWT Applet JApplet Applet Frame JFrame Frame Dialog JDialog Dialog Window JWindow Window Popup-Menu JPopupMenu PopupMenu Panel JPanel Panel Layered-Pane JLayeredPane Desktop-Pane JDesktopPane Internal-Frame JInternalFrame Scroll-Pane JScrollPane ScrollPane Tabbed-Pane JTabbedPane Toolbar JToolBar Button JButton Button Toggle-Button JToggleButton Button Label JLabel Label Checkbox JCheckBox CheckBox Radiobutton JRadioButton CheckBox Combobox JComboBox Choice List JList List Slider JSlider Textfield JTextField TextField Password-Field JPasswordField TextField Formatted-Textfield JFormattedTextField Spinner JSpinner Textarea JTextArea TextArea Editor-Pane JEditorPane Text-Pane JTextPane Table JTable Tree JTree File-Chooser JFileChooser FileChooser Color-Chooser JColorChooser Option-Pane JOptionPane Tooltip JToolTip Menubar JMenuBar MenuBar Menu JMenu Menu Menuitem JMenuItem MenuItem Checkbox-Menuitem JCheckBoxMenuItem CheckBoxMenuItem Radiobutton-Menuitem JRadioButtonMenuItem CheckBoxMenuItem