Java Standard: Grafische Oberflächen mit Swing: Top Level Container: javax swing JOptionPane

Aus Wikibooks


JOptionPane[Bearbeiten]

JOptionPane ist eine Klasse, die der einfachen Erzeugung von Standarddialogen dient. Folglich steht die Möglichkeit der unkomplizierten Erzeugung im Vordergrund, nicht die Modifikation der Dialoge. Im Abschnitt Einsatz von Dialogen finden Sie Verweise auf weitere Klassen zur Dialogerzeugung.

Es existieren verschiedene Dialogtypen, die mittels der Klasse JOptionPane erzeugt werden können. Dabei kann man entweder ein Objekt erzeugen um auf die vererbten Methoden zuzugreifen oder direkt statische Methoden aus JOptionPane aufrufen. Der letztere Weg dürfte für Java-Einsteiger geeigneter sein.

Die gebräuchlichsten Dialogtypen sind:

  • Confirmation Dialog - Dialog, der dem Nutzer eine Bestätigung oder Beantwortung einer Frage ermöglicht
  • Message Dialog - ein Dialog, der dem Nutzer eine Information ausgibt. In der Regel Fehler- bzw. Ausnahmemeldungen.
  • Input Dialog - ein Dialog, der vom Nutzer eine Eingabe anfordert und diese an die Anwendung zurückgeben kann.
  • Option Dialog - ein Dialog, der eine Auswahl aus Alternativen einfordert und das Ergebnis der Auswahl an die Applikation zurückgeben kann.

Diese Dialogtypen und Möglichkeiten ihrer Erzeugung werden im Folgenden vorgestellt.

Confirmation Dialog[Bearbeiten]

Der Aufruf der statischen Methode showConfirmationDialog() aus der Klasse JOptionPane erzeugt, je nach Parametereinstellung eine ähnlich geartete Ausgabe

Der Quelltext zu dieser Meldung, sieht wie folgt aus

import javax.swing.JOptionPane;

public class Meldung{
	public static void main(String[] bla){

		// Aufruf der statischen Methode showConfirmDialog()
		int eingabe = JOptionPane.showConfirmDialog(null,
                                                            "Geben Sie Ihr Einverständnis?",
                                                            "Einverständnis",
                                                            JOptionPane.YES_NO_CANCEL_OPTION);
		System.out.println(eingabe);
		System.exit(0);

	}
}

Die Auswahl, also Ja, Nein oder Abbrechen, wird als int-Wert zurückgegeben und kann zur Auswertung in einer Integer Variable gespeichert werden.

  • Ja = 0
  • Nein = 1
  • Abbrechen = 2

Die Methode kann natürlich auch mit anderen Parametern aufgerufen werden. Hierzu sei auf die Dokumentation der Java API verwiesen.

Message Dialog[Bearbeiten]

Der Aufruf der statischen Methode showMessageDialog() aus der Klasse JOptionPane erzeugt, je nach Parametereinstellung eine ähnlich geartete Ausgabe

Der zugehörige Quelltext lautet wie folgt:

import javax.swing.JOptionPane;
 
public class Meldung{
        public static void main(String[] bla){
 
                // Aufruf der statischen Methode showMessageDialog()
                JOptionPane.showMessageDialog(null,
                                              "Sie müssen eine Ganzzahl eingeben",
                                              "Eine Nachricht",					      
					      JOptionPane.WARNING_MESSAGE);
 
                System.exit(0);
 
        }
}

Die Methode showMessageDialog() gibt keinen Wert zurück, da sie nur der Information des Nutzer dient. Für weitere Parametrisierungsmöglichkeiten sei wieder auf die Dokumentation der Java API verweisen.

Input Dialog[Bearbeiten]

Der Aufruf der statischen Methode showInputDialog() aus der Klasse JOptionPane erzeugt, je nach Parametereinstellung eine ähnlich geartete Ausgabe

import javax.swing.JOptionPane;

public class Meldung{
	public static void main(String[] bla){

		// Aufruf der statischen Methode showInputDialog()
		String eingabe = JOptionPane.showInputDialog(null,"Geben Sie Ihren Namen ein",
                                                             "Eine Eingabeaufforderung",
                                                             JOptionPane.PLAIN_MESSAGE);

		System.exit(0);

	}
}

Der eingegebene Text wird von der Methode als String zurückgegeben und kann in einer Variable, hier eingabe zur Auswertung bzw. Verarbeitung gespeichert werden.

Parametrisierung[Bearbeiten]

Die Parametrisierung der showXXXDialog()-Methoden läuft im Grunde immer gleich ab, weshalb diese in einem extra Abschnitt erläutert wird. Folgende Parameter können an verschiedene Methoden übergeben werden:

  • Component parentComponent - in obigen Beispielen immer null. Hierdurch wird das Dialogfenster in der Mitte des Bildschirms angezeigt, da es keinem (Eltern-)Objekt zugeordnet wurde. Übergibt man beispielsweise einen Container, kann der Dialog dieser Kompnente hinzugefügt werden.
  • Object message - Die Nachricht, die in dem Fenster angezeigt wird. Dabei muss diese nicht zwingend aus Strings bestehen. Es können beispielsweise Strings mit Textfeldern kombiniert werden.
  • String title - Der Titel des Dialogfensters.
  • int optionType - Der Optionstyp legt fest, welche Buttons dem Nutzer angeboten werden. Optionen sind:
  • DEFAULT_OPTION - Die aufgerufene Methode legt fest welche Buttons angezeigt werden.
  • YES_NO_OPTION - Auswahl aus "Ja" und "Nein".
  • YES_NO_CANCEL_OPTION - Auswahl aus "Ja", "Nein" und "Abbrechen"
  • OK_CANCEL_OPTION - Auswahl aus "OK" und "Abbrechen"
  • int messageType - Der Typ des Dialogfensters. Damit lässt sich das Symbol der Nachricht beeinflussen. Optionen sind:
  • ERROR_MESSAGE
  • INFORMATION_MESSAGE
  • WARNING_MESSAGE
  • QUESTION_MESSAGE
  • PLAIN_MESSAGE

Mit diesen Parametern sollte man die nötigsten Einstellungen der Dialoge bewältigen können.

Option Dialog[Bearbeiten]

Der Option Dialog stellt bezüglich der Parametrisierung einen Sonderfall dar. Hier steht nur eine Methode zur Verfügung, sprich diese Methode wird nicht übersteuert. Dafür kann man mit dem Option Dialog mehrere Optionen zur Verfügung stellen.

Der zugehörige Quelltext lautet wie folgt:

import javax.swing.JOptionPane;

public class Meldung{
	public static void main(String[] bla){

		// Erstellung Array vom Datentyp Object, Hinzufügen der Optionen		
		Object[] options = {"OK", "Cancel", "Ja", "Nein", "Egal"};

                int selected = JOptionPane.showOptionDialog(null,
                                                            "Treffen Sie eine Auswahl",
                                                            "Alternativen",
							    JOptionPane.DEFAULT_OPTION, 
                                                            JOptionPane.INFORMATION_MESSAGE, 
							    null, options, options[0]);
		System.out.println(selected);

		System.exit(0);

	}
}

Wie man erkennt, kann die Methode showOptionDialog ein Array vom Datentyp Object aufnehmen, das alle Optionen bzw. Alternativen enthält. Dabei ist die Behandlung verschiedener Objekttypen zu berücksichtigen:

  • Component - Die Komponente wird direkt zur Buttonzeile des Dialogfensters hinzugefügt.
  • String - Es wird ein Button mit dem im String enthaltenen Text erzeugt.
  • Icon - Das Bild im Iconobjekt wird einem Button hinzugefügt.
  • Andere Objekttypen werden einfach mit der toString()-Methode als Strings in Buttons geschrieben

Dialoge selbst zusammenstellen[Bearbeiten]

Man kann mittels der Methode createDialog() selbstständig Dialoge aus unterschiedlichsten Komponenten zusammenstellen. Jedoch ist dazu ein Objekt der Klasse JOptionPane notwendig. Hier ein Beispiel mit zwei Textfeldern.

Der zugehörige Quelltext sieht wie folgt aus:

import javax.swing.JOptionPane;
import javax.swing.JTextField;

public class Meldung{
	public static void main(String[] bla){

		// Erstellung Array vom Datentyp Object, Hinzufügen der Komponenten		
		JTextField name = new JTextField();
		JTextField vorname = new JTextField();
                Object[] message = {"Name", name, 
        		"Vorname", vorname};

                JOptionPane pane = new JOptionPane( message, 
                                                JOptionPane.PLAIN_MESSAGE, 
                                                JOptionPane.OK_CANCEL_OPTION);
                pane.createDialog(null, "Titelmusik").setVisible(true);

                System.out.println("Eingabe: " + name.getText() + ", " + vorname.getText());
		System.exit(0);
	}
}

Es wird ein Object Array erzeugt und mit Komponenten befüllt. Die Reihenfolge von oben nach unten im Dialogfenster entspricht der Reihenfolge im Array. Ein Objekt vom Datentyp JOptionPane wird erzeugt und das Array übergeben. So wird festgelegt, welche Komponenten in welcher Reihenfolge in dem Dialog enthalten sein sollen. Dann wird die Methode createDialog() aufgerufen, die ein Objekt aus JDialog zurück gibt, das den Spezifikationen in dem JOptionPane Objekt entspricht. Der JDialog wird keiner Komponente zugeordnet.

Einsatz von Dialogen[Bearbeiten]

Der Einsatz von Dialogen sollte auch innerhalb kleinerer Anwendungen nur spärlich geschehen. Bei komplexen Anwendungen sollte auf jeden Fall immer eine GUI (Graphical User Interface / grafische Nutzerschnittstelle bzw. -oberfläche) eingesetzt werden. Diese lässt sich mittels Top-Level-Containern wie JFrame realisieren.

Zur Erstellung einer GUI mittels JAVA Swing sei auf das entsprechende JAVA Tutorial unter [1] verwiesen.

Swing bietet unterschiedliche Klassen für Dialoge, die bestimmte Aufgaben übernehmen sollen.

  • JOptionPane - Standarddialoge zur Information des Nutzers über Fehleingaben und Fehlermeldungen sowie der Bestätigung von Nutzeraktionen
  • JColorChooser - Standarddialog zur Auswahl von Farben aus einer Farbpalette
  • JFileChooser - Standarddialog zur Dateiauswahl
  • Printing API - Klassen zur Erstellung von Druckdialogen
  • JDialog - um selbst Dialoge zu erstellen

Generell sind Dialoge nur dazu gedacht, die Aufmerksamkeit des Nutzers temporär auf sich zu ziehen und vom Hauptfenster der Anwendung abzulenken. Setzt man Dialoge zu exzessiv ein, leidet die Gebrauchstauglichkeit der Software extrem.