Ich möchte in Java Swing ein JDialog erstellen, bei dem, wenn es geöffnet ist, das übergeordnete Fenster nicht zugänglich ist (genau wie beim Öffnen des Datei-Explorers in Microsoft Word). Gibt es in der JDialog-Klasse eine Methode, die dieses Verhalten bietet?
Antworten
Zu viele Anzeigen?Sie haben zwei Möglichkeiten:
Verwenden Sie die statischen Methoden in JOptionPane
. Diese erstellen standardmäßig modale Dialogfelder:
Window parentWindow = SwingUtilities.getWindowAncestor(parentPanel);
JOptionPane.showMessageDialog(parentWindow, "Hallo, Welt"); // Erstellen Sie ein modales Dialogfeld, das mit dem übergeordneten Fenster ausgerichtet ist.
Erstellen Sie explizit ein JDialog
:
Window parentWindow = SwingUtilities.getWindowAncestor(parentPanel);
JDialog dlg = new JDialog(parentWindow, ModalityType.APPLICATION_MODAL);
Die erste Option ist wesentlich einfacher und ich ziehe sie besonders bei modalen Dialogfeldern vor.
Adamski und Jan haben bereits die richtigen Antworten, aber ich wollte sicherstellen, dass das Konzept eines Modalen Fensters erklärt wird.
Der Benutzer hat nach einem Dialog gefragt, der den Zugriff auf das Elternfenster blockiert. Dies wird als modaler Dialog (oder modales Fenster) bezeichnet. Wikipedia gibt diese Definition:
Im Design von Benutzeroberflächen ist ein Modales Fenster ein untergeordnetes Fenster, mit dem Benutzer interagieren müssen, bevor sie zur Bedienung der übergeordneten Anwendung zurückkehren können
Also bedeutet "modal", dass es Elternfenster blockiert (Benutzer können nicht mit einem anderen Fenster als dem modalen Fenster interagieren), während "nicht-modal" oder "moduslos" bedeutet, dass die untergeordneten und übergeordneten Fenster gleichzeitig zugänglich sind.
Dies ist ein Konzept, das allgemein in GUI-Frameworks vorhanden ist, nicht nur im Swing-Framework. In jedem GUI-Framework, das Sie verwenden, können Sie wahrscheinlich diese Art von Funktionalität finden, indem Sie nach einer modal
Eigenschaft suchen.