Modaler Dialog toFront()???



  • Ich habe einen modalen Dialog, den ich gerne explizit nach vorne bringen will, wenn ich ihn gerade erst neu anzeige (weil er das in manchen Situationen nicht immer macht). Dafür gibt es ja die toFront() Methode. Diese zeigt aber nur Wirkung, wenn das Fenster bereits sichtbar ist. Also wäre das hier logisch:

    myDialog.setVisible(true);
    myDialog.toFront();
    

    Dummerweise wird setVisible() erst dann verlassen, wenn der Dialog geschlossen wurde.

    Wie macht ihr das, um einen modalen Dialog explizit nach vorne zu holen? (ich weiß das das Verhalten platformabhängig ist, aber ich nutze Windows) Erstellt Ihr diesen in einem Workerthread um danach toFront() aufrufen zu können?



  • Hi,

    ich programmiere zwar keine Java, meine erste Idee wäre, toFront im Ctor des modalen Dialogs aufzurufen. Wäre das möglich?

    Held der Nacht



  • Im Ctor vom Dialog ist dieser noch nichts sichtbar. Er wird erst sichtbar, wenn ich setVisible aufrufe.



  • Und, äh, wenn du setVisible ebenfalls auslagerst?

    class MyDialog extends JDialog {
      public MyDialog() {
        setTitle("Foobar");
        setVisible(true);
        toFront();
      }
    }
    
    MyDialog dia = new MyDialog();
    

    Ich sollte meine Java-Kenntnisse auch mal wieder auffrischen 😞



  • du hast ja trotzdem tofront HINTER dem setvisible. Das ist ja die Schwierigkeit. 😃

    Aber ich habs jetzt anders gelöst: hab das erstellen und anzeigen in einen Thread ausgelagert. Dummerweise kommt dann aber das tofront zu früh, während sich der Dialog noch aufbaut (er ist immer noch nicht sichtbar). Jetzt muß ich ein WindowListener (opened) benutzen, der das dann explizit aufruft, wenn er fertig ist.

    Was für ein Aufwand, ich wollte nur das Fenster nach vorne bringen.



  • Artchi schrieb:

    du hast ja trotzdem tofront HINTER dem setvisible. Das ist ja die Schwierigkeit. 😃

    Ah, fuck. Stimmt ja ^^
    Sorry.

    Aber ich habs jetzt anders gelöst: hab das erstellen und anzeigen in einen Thread ausgelagert. Dummerweise kommt dann aber das tofront zu früh, während sich der Dialog noch aufbaut (er ist immer noch nicht sichtbar). Jetzt muß ich ein WindowListener (opened) benutzen, der das dann explizit aufruft, wenn er fertig ist.

    Was für ein Aufwand, ich wollte nur das Fenster nach vorne bringen.

    Swing ist halt Schrott 😉



  • Wieso benötigst du "toFront" überhaupt? Hast du dem Dialog auch ein Parent-Fenster übergeben? Denn eigentlich sollte so ein Dialog von sich aus zuvorderst aufpoppen.

    Versuchs mal mit

    final Dialog dialog = ...
    EventQueue.invokeLater( new Runnable(){
      public void run(){
        dialog.toFront();
      }
    });
    dialog.setVisible( true );
    

Log in to reply