Swing JDialog öffnen und dann warten bis er geschlossen wurde

ortauq

Aktives Mitglied
Ich habe eine relativ einfache Frage (zumindest glaube ich das), aber ich finde momentan nichts passendes über Google.
Ich will mein von JDialog abgeleitetes Objekt öffnen. Der weitere Programmablauf soll warten bis der Dialog wieder geschlossen wurde.
Doch wie?
Meine bisherige Lösung, die auch funktioniert sieht so aus:
Code:
public static void main(String[] args)
    {
                //open dialog
                ConfigurationGui gui = new ConfigurationGui();
                gui.setVisible(true);
                 while(gui.isVisible()){
                     try
                    {
                        Thread.sleep(100);
                    } catch (InterruptedException e)
                    {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                 }
                System.out.println("Dialog done");
           
        }

Dies kommt mir jedoch nicht wie die ideale Lösung vor.
Gibt es eine bessere Lösung?
 
Theoretisch gäbe es die Möglichkeit den JDialog als Modal zu deklarieren, was ich aber nicht als sehr Userfreundlich erachte.

Aber vielleicht solltest du den Ablauf der Applikation etwas überdenken. Theoretisch sollte diese nur etwas zu tun haben wenn du ein Event auslöst (von Hintergrundsachen mal abgesehen) und daher müsste so ein "Sleep" gar nicht notwendig sein.
 
Java:
     // Parent muss angegeben werden; andernfalls null
     JFrame parent = null;
   
     BeispielDialog dlg = new BeispielDialog (parent);
     dlg.showDialog();
     // jetzt wartet das Programm, bis dlg geschlossen wird.
     // dlg eventuell verwerfen, falls nicht mehr nötig.
     dlg.dispose();
     // weiter im Text...
Die Klasse BeispielDialog sieht dann z.B. so aus:
Java:
public class DASettingsDlg extends JDialog {
   /**
    *   Konstruktor für den Programmeinstellungs-Dialog
    *   @param parent Das übergeordnete Fenster, in dem der Dialog angezeigt werden soll 
    */ 
   public DASettingsDlg(JFrame parent) {
     // Konstruktor der Oberklasse aufrufen, damit das Fenster "echt modal" reagiert.
     // Das heißt, dass der dialog-aufrufende Code wartet, bis der Dialog geschlossen wird.
     super(parent, true);
   }

   public void showDialog() {

     setTitle("Einstellungen");
     setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
     setBounds(0, 0, 440, 300);
     // weiterer Code
   }
 
Zuletzt bearbeitet von einem Moderator:

Zurück
Oben