Java Standard: Grafische Oberflächen mit Swing
Aus Wikibooks
| Bewertung: Diese Wikiseite besteht im Wesentlichen aus Listen und/oder Überschriften, wobei hier Fließtext stehen sollte. Es wird Hilfe zur Überarbeitung gewünscht. |
[Bearbeiten] Grafische Oberflächen mit Swing
Mit Swing hat Sun Microsystems eine API (Application Programming Interface, zu Deutsch Programmierschnittstelle) geschaffen um den Beschränkungen des AWT zu entkommen. Hierdurch können auch komplexe grafische Oberflächen wie Bäume oder Tabellen Verwendung finden. Swing - seit Java 1.2 zu finden im Paket javax.swing - benutzt hierbei jedoch zahlreiche Funktionalitäten des java.awt Paket so dass Vorkenntnisse im Bereich AWT sinnvoll sind.
[Bearbeiten] Top-Level Container
[Bearbeiten] Leichtgewichtige Container
- JComponent
- JPanel
- JDesktopPane
- JInternalFrame
- JLayeredPane
- JScrollPane
- JSplitPane
- JTabbedPane
- JToolBar
[Bearbeiten] Kontrollelemente
[Bearbeiten] Anzeigenelemente (Ausgabe)
[Bearbeiten] Textverarbeitung (Ein- und Ausgabe)
- JTextComponent
- JTextField
- JTable
- JTextArea
- JPasswordField
- JFormattedTextField
- JTextPane
- JEditorPane
- JList
[Bearbeiten] LayoutManager
- BorderLayout
- FlowLayout
- ViewportLayout
- GridLayout
- GroupLayout
- ScrollPaneLayout
- GridBagLayout
- CardLayout
- BoxLayout
- OverlayLayout
- SpringLayout
- "NullLayout"
[Bearbeiten] Grafische Oberflächenelemente
[Bearbeiten] Icon
Icon ist eine grafische Komponente für die Anzeige von - meist kleinen - Bildern.
[Bearbeiten] ImageIcon
ImageIcon ist eine direkte Unterklasse von Icon.
[Bearbeiten] JLabel
JLabel als äquivalent zu java.awt.Label und stellt eine "einfache" Beschriftung dar, welche optional um ein Icon erweitert werden kann. Eine JLabel Instanz kann hierbei einer anderen Komponente als Beschriftung über die Methode setLabelFor (JComponent) zugewiesen werden.
[Bearbeiten] AbstractButton
Mit AbstractButton werden die allgemeinen Eigenschaften von Schaltflächen bereitgestellt. Hierzu gehören:
- setMnemonic zur Definition des Buchstabens über den per Tastatur die Schaltfläche aktiviert werden kann.
- doClick zur Aktivierung der Schaltfläche ohne Benutzerinteraktion
- setIcon um ein Bild der Schaltfläche hinzuzufügen. Hierzu kommen noch die Methoden
setDisabledIcon,setSelectedIcon,setRolloverIcon,setDisabledSelectionIconundsetRolloverSelectedIconzur genauen Steuerung.
[Bearbeiten] JButton
Der Typ JButton ist die Implementierung für eine "normale" Schaltfläche. Auf die Betätigung der Schaltfläche kann über einen ActionListener bzw. ein Action Objekt reagiert werden.
[Bearbeiten] JToggleButton
Ein JToggleButton ist eine Schaltfläche, welche beim ersten Betätigen aktiviert wird und ein zweites gesondertes Betätigen zur Deaktivierung benötigt.
[Bearbeiten] JCheckBox
Eine JCheckBox ist ein Auswahlfeld, welches an- und ausgeschaltet werden kann.
[Bearbeiten] JRadioButton
Ein JRadioButton ist ein Auswahlfeld, welches an- und ausgeschaltet werden kann. JRadioButtons werden hierbei üblicherweise nur in Verbindung mit einer ButtonGroup verwendet.
[Bearbeiten] ButtonGroup
Eine ButtonGroup dient dazu insbesonder RadioButtons zusammenzufassen, so dass nur eine JRadioButton aktiv ist.
[Bearbeiten] Border
Bei einem Border handelt es sich um einen Rahmen, der um beliebige andere grafische Komponenten gelegt werden kann.
[Bearbeiten] JToolTip
Bei einem JToolTip handelt es sich um ein Tooltip-Element, wie man es von verschiedenen Programmen kennt. Es zeigt nach kurzem Zeitraum eine kurze Hilfe zu einem bestimmten Element an.
[Bearbeiten] JTextComponent
[Bearbeiten] JTextField
JTextField erzeugt ein Textfeld
[Bearbeiten] JPasswordField
Das JPasswordField ist ein spezielles JTextField, welches die Zeichen nicht auf dem Bildschirm darstellt, sondern ein alternatives Zeichen zeigt, das so genannte Echozeichen. Standardmäßig ist das ein Sternchen. So lassen sich Passwort-Felder anlegen, die eine Eingabe verbergen.
[Bearbeiten] JFormattedTextField
Das formatierte Eingabefeld dient dazu, Eingaben nur in einer bestimmten vorgegebenen Form zuzulassen. Im Gegensatz zu anderen Sprachen werden dabei die fest definierten Zeichen mit als Inhalt zurückgegeben. Eine einfache Möglichkeit, Formatierungen vorzugeben ist der MaskFormatter.
[Bearbeiten] JTextArea
JTextArea erzeugt ein mehrzeiliges Textfeld
[Bearbeiten] JTextPane
JTextPane erzeugt einen Textcontainer, der nur dazu da ist, mit Text gefüllt zu werden. Der in ihm enthaltene Text ist nicht editierbar.
[Bearbeiten] JEditorPane
Mit Hilfe des JEditorPane kann ein bereits formatierter Text editiert werden. Das JEditorPane unterstützt als Formate RTF (Rich Text Format) und HTML.
[Bearbeiten] JScrollBar
[Bearbeiten] JScrollPane
[Bearbeiten] JSlider
[Bearbeiten] JProgressBar
Mit der JProgressBar lässt sich der Fortschritt einer Aktion visualisieren. Bei der Instanziierung wird eine Unter- und Obergrenze angegeben. Innerhalb der Aktion, deren Fortschritt visualisiert werden soll, muss der aktuelle Wert der JProgressBar in bestimmten Abständen inkrementiert werden.
[Bearbeiten] JComboBox
Die JComboBox beinhaltet verschiedene Einträge, die angewählt werden können.
[Bearbeiten] JList
Das JList-Element beinhaltet eine Liste von Einträgen, die, wie in der JComboBox, angewählt werden können.
[Bearbeiten] JViewPort
[Bearbeiten] JMenuBar
In Swing können alle Hauptfenster mit Ausnahme von JWindow eine Menüleiste haben. Dabei handelt es sich um eine Instanz der Klasse JMenuBar, die dem Hauptfenster durch Aufruf von addJMenuBar hinzugefügt wird.
[Bearbeiten] JMenuItem
Ein einzelnes Element innerhalb eines JMenu, beispielsweise "Datei-Drucken".
[Bearbeiten] JMenu
Dient als Container für JMenuItems und JSeparators.
[Bearbeiten] JCheckBoxMenuItem
[Bearbeiten] JRadioButtonMenuItem
[Bearbeiten] JSeparator
Die einzelnen Elemente eines JMenu können mit dem JSeparator in logische Gruppierungen unterteilt werden. Es handelt sich um eine Trennlinie.
[Bearbeiten] JRootPane
[Bearbeiten] JLayeredPane
[Bearbeiten] JDesktopPane
[Bearbeiten] JInternalFrame
[Bearbeiten] JDialog
[Bearbeiten] JPopupMenu
Ein JPopupMenu wird meist als Kontextmenü genutzt und entsprechend z.B. über die Maus oder Tastatur aktiviert.
[Bearbeiten] JToolBar
Eine Toolbar kann man vereinfacht als die kleinen Leisten mit Bildchen beschreiben, wie man sie in nahezu jeder Textverarbeitung sieht.
[Bearbeiten] JTabbedPane
JTabbedPane ermöglicht das Aufteilen der grafischen Oberfläche über sog. Reiter. Diese können beliebig positioniert und auch mit Icons versehen werden.
[Bearbeiten] JSplitPane
JSplitPane ermöglicht die Aufteilung der grafischen Oberflächen in zwei Bereiche, wahlweise horizontal oder vertikal. Standardmässig kann der Anwender hierbei die Größen der zwei Komponenten der JSplitPanel beliebig in Ihrer Größe ändern.
[Bearbeiten] JTable
Eine JTable ermöglicht eine grafische Tabelle, optional auch mit Tabellenkopf.
[Bearbeiten] Beispiel
import javax.swing.table.DefaultTableModel; import javax.swing.*; import java.awt.BorderLayout; import java.util.Vector; public class GUIFilmTabelle extends JPanel { //Vektor für Spaltennamen private Vector columnNames = new Vector(); //Vektor für Daten private Vector data = new Vector(); public GUIFilmTabelle() { super(new BorderLayout()); //TableModel: Tabellenmanipulation, Daten MyDefaultTableModel model = new MyDefaultTableModel(data, columnNames); //Tabelle: Anzeige JTable table = new JTable(model); model = (MyDefaultTableModel) table.getModel(); JComboBox comboBox = new JComboBox(); comboBox.addItem("UP"); comboBox.addItem("DOWN"); table.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(comboBox)); // ScrollPane zu JPanel hinzufügen add(new JScrollPane(table), BorderLayout.CENTER); } // Inner class MyDefaultTableModel: Tabellen-Model public class MyDefaultTableModel extends DefaultTableModel { public MyDefaultTableModel(Vector data, Vector columnNames) { super(data, columnNames); setDataVector(data,columnNames); this.addColumn("Name"); this.addColumn("UP/DOWN"); } public Class getColumnClass(int col) { Vector v = (Vector) this.getDataVector().elementAt(0); return v.elementAt(col).getClass(); } public boolean isCellEditable(int row, int col) { Class columnClass = getColumnClass(col); return columnClass != ImageIcon.class; } } }
[Bearbeiten] JTree
Swing stellt eine Komponente für die Darstellung von Baumstrukturen zur Verfügung - JTree.
[Bearbeiten] Layoutmanager
[Bearbeiten] BorderLayout
Dieses Layout platziert Komponenten in 5 möglichen Bereichen: oben, unten, links, rechts, zentriert.
[Bearbeiten] FlowLayout
[Bearbeiten] ViewportLayout
[Bearbeiten] GridLayout
Dieses Layout bildet ein Gitter, dessen Zellen alle gleich groß sind. Die Anzahl der Spalten und Reihen, die dieses Gitter enthalten soll, kann spezifiziert werden. Pro Zelle kann dann genau eine Komponente zum Layout hinzugefügt werden. Die Komponenten werden in ihrer Größe gestreckt, damit sie die ganze Zelle ausfüllen. Außerdem kann ein horizontaler und vertikaler Abstand zwischen den einzelnen Zellen in Pixeln angegeben werden.
[Bearbeiten] GroupLayout
[Bearbeiten] ScrollPaneLayout
Für gewöhnlich wird dieses Layout nie explizit benutzt. Stattdessen erzeugt man ein ScrollPanel, welches sich dann automatisch dieses Layout setzt, um die ScrollBars, die Eckkomponenten, den Inhalt und die Zeilen- und Spaltenheader zu setzen.
[Bearbeiten] GridBagLayout
Das GridBagLayout ist ein komplexer LayoutManager2[1], mit welchem eine Menge an Möglichkeiten geboten werden. Die eigentliche Ausrichtigung der Komponenten erfolgt über das GridBagConstraints Objekt, welches beim Hinzufügen zum Container anzugeben ist.
[Bearbeiten] CardLayout
[Bearbeiten] BoxLayout
- LINE_AXIS
- PAGE_AXIS
- X_AXIS
- Y_AXIS
[Bearbeiten] OverlayLayout
Mit dem OverlayLayout ist es möglich mehrere Componenten übereinander anzuordnen.
[Bearbeiten] SpringLayout
[Bearbeiten] "NullLayout"
Ein NullLayout ist im eigentlichen Sinne kein Layout. Hierbei können die Elemente frei, mittels Positionsangaben, auf der Oberfläche positioniert werden.
setLayoutManager(null);


