Literatur

JOptionPane

Der JOptionPane (javax.swing.JOptionPane) gehört zu der Kategorie der Fenster in Java. Es wird häufig als Pop-up für Fehlermeldungen oder Hinweise verwendet. Aber auch eine einfache Rückfrage wie "Wollen Sie wirklich die Datei xyz überschreiben?" wird mit einem JOptionPane realisiert.

Im Folgenden zeigen wir den grundsätzlichen Aufbau eines JOptionPanes:

JOptionPane schematischer Aufbau

Die grüne Fläche in dem obigen Bild symbolisiert das Icon des jeweiligen Dialoges, sofern eines verwendet wird. Dieses ist abhängig von der Art der Nachricht. Die blaue Fläche steht für die eigentliche Nachricht. Darunter (orange) befindet sich ein mögliches Eingabefeld, welches angezeigt wird, wenn der Benutzer aufgefordert wird, etwas einzugeben. In dem unteren lila eingefärbten Bereich befinden sich sämtliche Schaltflächen.

Hier sehen Sie ein Beispiel für ein JOptionPane mit einem Eingabefeld:

JOptionPane als Input Dialog

In Java werden bei einem JOptionPane fünf unterschiedliche Nachrichten-Typen unterschieden. Für diese gibt es jeweils eine eigene Konstante:

Konstante Beschreibung
ERROR_MESSAGE Der Nachrichten-Typ ERROR_MESSAGE steht für eine Fehlermeldung. Der Dialog erscheint mit dem entsprechenden Icon dafür, in der Regel ist dies das rote X.
INFORMATION_MESSAGE Der Nachrichten-Typ INFORMATION_MESSAGE wird für eine einfache Informationsmeldung an den Anwender genutzt. Der Dialog trägt ein Icon, in dem ein kleines i  abgebildet ist.
WARNING_MESSAGE Der Nachrichten-Typ WARNING_MESSAGE steht für eine Warnungsmeldung an den Anwender. Der Dialog erscheint mit einem Icon, in dem ein Ausrufezeichen (!) in einem gelben Warndreieck abgebildet ist.
QUESTION_MESSAGE Der Nachrichten-Typ QUESTION_MESSAGE wird für eine Rückfrage des Programms an den Anwender verwendet. Der Dialog erscheint mit einem Icon, in dem ein Fragezeichen (?) abgebildet ist.
PLAIN_MESSAGE Der Nachrichten-Typ PLAIN_MESSAGE wird für einfache Textmeldungen an den Anwender benutzt. Dieser Dialog trägt kein Icon.

Neben den Nachrichtentypen unterscheidet man auch noch zwischen unterschiedlichen Optionstypen. Optionstypen geben an, wie viele und welche Art von Schaltflächen auf dem Dialog angezeigt werden sollen. Man unterscheidet hier insgesamt vier Optionstypen. Folgende Übersicht beschreibt die Optionstypen, welche ebenso wie die Nachrichtentypen durch eine Konstante der Klasse JOptionPane repräsentiert werden:

Konstante Beschreibung
DEFAULT_OPTION Über den Optionstyp DEFAULT_OPTION wird festgelegt, dass der JOptionPane über eine Schaltfläche mit der Aufschrift "Ok" verfügt.
YES_NO_OPTION Bei Verwendung des Optionstyps YES_NO_OPTION werden zwei Schaltflächen zur Verfügung gestellt: Eine mit der Beschriftung "Ja" und eine mit der Beschriftung "Nein".
YES_NO_CANCEL_OPTION Den Optionstyp YES_NO_CANCEL_OPTION verwendet man, wenn man drei Schaltflächen haben möchte: Ja", "Nein" und "Abbrechen".
OK_CANCEL_OPTION OK_CANCEL_OPTION  wird benutzt, wenn der JOptionPane die Schaltflächen "Ok" und "Abbrechen" haben soll.

Welche Typen Sie verwenden, hängt von der jeweiligen Situation ab. Wenig Sinn würde es z.B. machen, wenn man als Nachrichtentyp die QUESTION_MESSAGE wählt und sich gleichzeitig für den Optionstyp DEFAULT_OPTION entscheidet.

Die Java-Klasse JOptionPane bietet vier statische Methoden, um schnell einen Dialog zu erstellen und anzuzeigen, ohne dass erst ein Objekt erstellt werden muss.

Diese statischen Methoden sind:

static int    showConfirmDialog(Component parentComponent, Object message)
static String showInputDialog(Component parentComponent, Object message)
static void   showMessageDialog(Component parentComponent, Object message)
static int    showOptionDialog(Component parentComponent, Object message, 
                String title, int optionType, int messageType, Icon icon, 
                Object[] options, Object initialValue)

Die oben vorgestellten statischen Methoden gibt es auch in erweiterter Form, d.h. mit mehr Parametern.

Beispiele für die Verwendung der Methoden zur Erstellung eines JOptionPanes:

// Bsp. 1: Eingabe-Dialog        
JOptionPane.showInputDialog("Dies ist ein Input Dialog");

// Bsp. 2: Dialog zur Bestätigung       
JOptionPane.showConfirmDialog(null, "Dies ist ein Confirm Dialog");

// Bsp. 3: Nachrichten-Dialog
JOptionPane.showMessageDialog(null, "Dies ist ein Message Dialog");

// Bsp. 4: Optionsdialog mit Warnhinweis
JOptionPane.showOptionDialog(null, "Dies ist ein Optionsdialog","Optionsdialog",
                JOptionPane.YES_NO_CANCEL_OPTION,
                JOptionPane.WARNING_MESSAGE, null, 
                new String[]{"A", "B", "C"}, "B");

Im ersten Beispiel erzeugen wir einen Dialog, der von dem Anwender eine Texteingabe verlangt. Der Parameter gibt die Nachricht an, die angezeigt werden soll. Dieser Dialog benutzt intern den Optionstyp OK_CANCEL_OPTION.

Der zweite Dialog ist ein Dialog, der eine Meldung anzeigt und die Optionen "Ja", "Nein" und "Abbrechen" anbietet. Den ersten Parameter setzen wir hier einfacherweise auf die null-Referenz, so dass ein interner Standard-Frame für die Anzeige verwendet wird. Der zweite Parameter gibt die anzuzeigende Nachricht an. Dieser Dialog besitzt intern den Optionstyp YES_NO_CANCEL_OPTION.

Der dritte Dialog ist ein einfacher Informationsdialog, der nur über einen "Ok"-Button verfügt. Den ersten Parameter setzen wir auch hier auf null, da wir keinen Frame definiert haben. Dieser Dialog besitzt intern den Optionstyp DEFAULT_OPTION.

Die Funktion showOptionDialog bietet die Möglichkeit, sich seinen eigenen JOptionPane zusammenzustellen und erwartet daher auch mehr Parameter. Als dritten Parameter kann man einen Titel, also die Überschrift des Dialoges angeben. Über den vierten Parameter kann man den Optionstyp angeben, über den fünften den Nachrichtentyp.  Als sechsten Parameter können wir ein eigenes Icon setzen. Da wir Icons noch nicht behandelt haben, übergeben wir hier die null-Referenz übergeben, so dass das Standard-Icon gewählt wird, welches mit dem Nachrichtentyp verknüpft ist. Als siebter Parameter kann ein Array mit selbstdefinierten Schaltflächen-Texten übergeben werden, in diesem Fall erzeugen wir Schaltflächen mit der Beschriftung "A", "B" und "C". Der letzte Parameter gibt an, welche von den zuvor definierten Schaltflächen standardmäßig selektiert sein soll. In unserem Fall wird die Schaltfläche "B" vorselektiert.

Wenn wir uns noch einmal die Übersicht der statischen Methoden ansehen, sehen wir, dass die Methode showInputDialog einen String zurückliefert. Der Rückgabewert enthält den Text aus dem Eingabefeld des JOptionPanes. Dieser kann dann zur weiteren Verarbeitung verwendet werden.

Die Methoden showConfirmDialog und showOptionDialog liefern einen Integer-Wert zurück. Dieser gibt an, welche Schaltfläche betätigt wurde. Diese Integer-Werte sind wieder Konstanten der Klasse JOptionPane. Folgende Übersicht zeigt die Konstanten:

Konstante Beschreibung
YES_OPTION Schaltfläche "Ja" wurde betätigt.
NO_OPTION Schaltfläche "Nein" wurde betätigt.
CANCEL_OPTION Schaltfläche "Abbrechen" wurde betätigt.
OK_OPTION Schaltfläche "Ok" wurde betätigt.
CLOSED_OPTION Der JOptionPane wurde geschlossen ohne eine Option zu wählen.

Die oben erwähnten statischen Methoden gibt es auch jeweils mit dem Zusatz "Internal", also z.B. showInternalInputDialog oder showInternalConfirmDialog. Damit wird der JOptionePane als interner Dialog der jeweiligen Elternkomponente, welche als Parameter übergeben werden muss, angezeigt.