Swing: Unterschied zwischen den Versionen
| Zeile 23: | Zeile 23: | ||
* '''<code>add(...)</code>''': fügt ein Element hinzu. | * '''<code>add(...)</code>''': fügt ein Element hinzu. | ||
* '''<code>remove(...)</code>''': entfernt ein Element. | * '''<code>remove(...)</code>''': entfernt ein Element. | ||
* '''<code>removeAll()</code>''': entfernt alle Elemente. | |||
* '''<code>setSize(int width, int height)</code>''' | * '''<code>setSize(int width, int height)</code>''' | ||
* '''<code>revalidate()</code>''' : wenn man dem Container ein neues Element hinzugefügt hat, dann muss man diese Methode aufrufen, damit der Container seine Größe anpasst. Am besten ruft man direkt danach <code>repaint()</code> (s.u.) auf. | * '''<code>revalidate()</code>''' : wenn man dem Container ein neues Element hinzugefügt hat, dann muss man diese Methode aufrufen, damit der Container seine Größe anpasst. Am besten ruft man direkt danach <code>repaint()</code> (s.u.) auf. | ||
Version vom 20. Mai 2015, 10:47 Uhr
Swing ist eine Java-Bibliothek, mit der man Benutzeroberflächen bauen kann.
Es lohnt sich nicht mehr zu tief in Swing einzusteigen, weil es ab Java 1.8 die neue Bibliothek JavaFX gibt, die mehr Funktionalität hat (z.B. Integration von Stylesheets) und sich u.a. auch für die Entwicklung von Benutzeroberflächen für Apps eignet.
Allerdings ist Swing immer noch geeignet, wenn man mal "ganz schnell" eine grafische Oberfläche für ein Programm braucht!
Deswegen werden hier nur wenige wesentliche Elemente von Swing benannt.
Swing lässt sich am besten mit einem geeigneten Plugin entwickeln, z.B. dem WindowBuilder für Eclipse.
Container
In Container kann man andere Oberflächenelemente reinpacken. Sie brauchen deswegen ein definiertes Layout.
Man kann auch Container in andere Container packen (Ausnahme: JFrame).
JFrame: Ein Fenster, das oben eine blaue Leiste hat für die Überschrift und das man schließen kann. EinenJFramebraucht man immer, weil JFrames selbstständig auf dem Bildschirm erscheinen können; alle anderen Elemente müssen in einenJFramereingepackt werden.JPanel: Ein Container, der eigentlich unsichtbar ist;JPaneldienen dazu, andere Elemente zusammenzufassen.JScrollPane: Ein Container, der Scrollbars bereitstellt, wenn der Inhalt zu groß ist, um ihn ganz im Container darzustellen.
wichtige Methoden
add(...): fügt ein Element hinzu.remove(...): entfernt ein Element.removeAll(): entfernt alle Elemente.setSize(int width, int height)revalidate(): wenn man dem Container ein neues Element hinzugefügt hat, dann muss man diese Methode aufrufen, damit der Container seine Größe anpasst. Am besten ruft man direkt danachrepaint()(s.u.) auf.repaint(): sorgt dafür, dass der Container neu gezeichnet wird.setVisible(boolean pVisible)setLayout(...); z.B.setLayout(new BorderLayout());- für JFrame:
getContentPane(): gibt den eigentlichen Inhalt desJFramezurück. - für JFrame:
setContentPane(...): Platziert ein Element imJFrame. Vorsicht:add(...)funktioniert fürJFramenicht! (Das ist nicht grade intuitiv, ist aber leider so.)
Layout
Jeder Container braucht ein Layout, in dem festgelegt wird, wie die Elemente im Container angeordnet werden.
BorderLayout: DasBorderLayoutlegt fünf Regionen fest:BorderLayout.CENTER,BorderLayout.NORTH,BorderLayout.SOUTH,BorderLayout.WEST,BorderLayout.EAST. In jeder der fünf Regionen kann nur ein Element platziert werden; das kann aber auch einJPaneloder ein andere Container sein.AbsoluteLayout: Dieses Layout ermöglicht es einem, die Elemente an Positionen zu platzieren, die man durch Koordinaten angibt (bzw. mit dem WindowBuilder zieht man die Komponenten an die passende Stelle.) Das ist praktisch, wenn man sicher weiß, dass die Elemente eine feste Größe haben.BoxLayout:BoxLayoutermöglicht, mehrere Elemente nebeneinander (X_AXIS) oder untereinander (Y_AXIS) zu platzieren.
Components
JLabel: einzeilige Schrift; nicht editierbar.JTextField: einzeiliges Textfeld; editierbar.JTextArea: mehrzeiliges Textfeld; editierbar. Um Text in mehreren Zeilen anzuzeigen, muss man als Zeilenumbruch "\n" einbauen.JButton: ein Button. Um das Klicken abzufangen, muss an den Button einActionListenerangehängt werden; das macht man am besten mit dem WindowBuilder.JCheckboxundJRadioButton: wichtig, um von vielen Möglichkeiten mehrere auszuwählen. Bei derJCheckboxkann man in der Regel mehrere anklicken; denJRadioButtonbenutzt man, wenn man von vielen Möglichkeiten nur eine wählen darf. Dafür müssen dieJRadioButtonszu einerButtonGrouphinzugefügt werden.
wichtige Methoden
setText(String pText)getText()isSelected()nur für JCheckbox und JRadioButton
JOptionPane
JOptionPane dient dazu, kleine Fenster aufzumachen, z.B. um eine Bestätigung oder Eingabe vom Nutzer abzufragen. Die Abarbeitung der aufrufenden Methode wartet so lange, bis der Nutzer das Fenster durch OK oder Abbrechen zugemacht hat.
wichtige Methoden
JOptionPane.showInputDialog(String pFrage): Fragt eine Texteingabe vom Nutzer ab. Gibt einenStringzurück.JOptionPane.showMessageDialog(Component parentComponent, String pMessage): Informiert den Nutzer über irgendetwas.parentComponentkannnullsein. Gibtvoidzurück.JOptionPane.showConfirmDialog(Component parentComponent, String pFrage): Fragt nach einer Bestätigung (Ja, Nein, Abbrechen).parentComponentkannnullsein. Gibtintzurück. Die möglichen Rückgaben sind:JOptionPane.YES_OPTIONJOptionPane.NO_OPTIONJOptionPane.CANCEL_OPTION- Die Rückgaben überprüft man z.B. so:
int gewaehlt = JOptionPane.showConfirmDialog(null, "Nochmal?");
if(gewaehlt == JOptionPane.YES_OPTION)
{...}
else if (gewaehlt == JOptionPane.NO_OPTION)
{...}
else
{...}