JDialog verschwindet bei Windowwechsel trotz modal

Status
Nicht offen für weitere Antworten.
A

AndyHoltmann

Gast
Tach!

Hab eine Klasse Dialog geschrieben, die von JDialog abgeleitet ist. Diese Klasse wird durch Knopfdruck des Hauptframes aktiviert.

Der Dialog öffnet sich auch wie gewünscht, aber er bleibt nicht immer im Vordergrund! Ich habe den dialog zwar modal gesetzt, wenn ich aber nun in ein anderes fenster wechsel oder alle anderen programme minimiere und dann wieder zurück zu meinem Fenster will, ist der Dialog verschwunden und ich kann den aufrufenden Frame nicht beenden sondern nur noch abschießen, da der dialog eine aktion erwartet. nur leider ist er nicht da ??

Andy
 

AlArenal

Top Contributor
Schau dir mal die Konstruktoren von JDialog an, da kannste deinen Frame als parent übergeben, dann funzt es auch mit dem Taskswitch...
 
A

AndyH

Gast
ah vielen dank!

aber ich noch folgendes problem:

der dialog wird von einem applet aus aufgerufen, und der konstruktor von jdialog bietet ja kein applet als owner. wie kann man das denn im falle von applets lösen ?

nochmals herzlichen dank!

Andy
 
G

Guest

Gast
hallo nochmal,
also ich habe hier den thread gefunden, der genau das problem beschreibt:

http://www.java-forum.org/de/viewtopic.php?t=19145&highlight=focuslistener

das funktioniert auch!

und im java sun forum den folgenden:

http://forum.java.sun.com/thread.jspa?threadID=654054&messageID=3844733

allerdings weiß ich überhaupt nicht, wie man die da beschriebene möglichkeit einsetzen kann. weiß jemand vielleicht wie und wo (AppletKlasse, JDialogKlasse) ich diese methode einsetzen kann um dem Jdialog im konstruktor mein applet als "frame" übergeben kann?

Frame f = (Frame)SwingUtilities.getAncestorOfClass(Frame.class, this);
 

Bleiglanz

Gesperrter Benutzer
Der Dialog öffnet sich auch wie gewünscht, aber er bleibt nicht immer im Vordergrund! Ich habe den dialog zwar modal gesetzt, wenn ich aber nun in ein anderes fenster wechsel oder alle anderen programme minimiere und dann wieder zurück zu meinem Fenster will, ist der Dialog verschwunden und ich kann den aufrufenden Frame nicht beenden sondern nur noch abschießen, da der dialog eine aktion erwartet. nur leider ist er nicht da ??
du hast:

ein native-Window (Peer) für das alte awt Applet

und

ein native-Window (Peer) für den JDialog

=> da funzt dann der ganze Schrott mit der Z-Order, dem Focus-Cycle usw. in Swing nicht mehr...

Code:
Frame f = (Frame)SwingUtilities.getAncestorOfClass(Frame.class, this);
// im Applet = this = das Applet
und die obige Zeile liefert dir einfach das Elter im Komponentenbaum vom Typ Frame, also das Ding, auf dem das Applet lebt

=> dieses übergibst du im Konstruktor vom JDialog
 
G

Guest

Gast
ok, aber wie mach ich das nun konkret. da fehlt mir leider noch das nötige hintergrundwissen um das so jetzt hinzubekommen. Könntest du mir das zeigen bitte, Bleiglanz? Hab hier auch schon die nötigen Fragmente:

Code:
public class Info extends JDialog
{
     

      public Info()
     { 
          
     }
}
und
Code:
public class AppletGui extends JApplet
{
        
        public void init()
       { 
            
       }

        //meine Methoden
     
}

Büütte ;)
 

Bleiglanz

Gesperrter Benutzer
Code:
public class Info extends JDialog{
      public Info(Applet appl){
         super((Frame)SwingUtilities.getAncestorOfClass(Frame.class, appl));
     }
}

public class AppletGui extends JApplet {       
        public void init(){
           Info meinInfo = new MeinInfo(this);
       }
}
nicht getestet
 
G

Guest

Gast
achso, nicht dass mir jemand unterstellt ich bemühe micht nicht selber. Der 5. Versuch sieht nun so aus und der compiler bleibt hier auch schön brav, aber in der eclipse appletvievervorschau funzt das immer nocht nicht.



Code:
public class AppletGui extends JApplet
{
        //...
       public Frame frame = (Frame)SwingUtilities.getAncestorOfClass(Frame.class, this); 
       
        public void init()
       {
           
       }

        //meine Methoden
     
}

Code:
public class Info extends JDialog
{
     

      public Info(AppletGui a)
     {
         super(a.frame);
         setModal(true);
         //...
     }
}

Ist das so richtig?
 

Bleiglanz

Gesperrter Benutzer
public Frame frame = (Frame)SwingUtilities.getAncestorOfClass(Frame.class, this);

das ist Quark, was soll this an der Stelle sein wenn noch nicht mal der Konstruktor gestartet wurde? möglicherweise gibts da noch gar keinen Frame im Objektbaum
 
G

Guest

Gast
Super, die Lösung von Bleiglanz geht!

Damit wäre das Problem einfach gelöst ;)

Schön, dass es Leute gibt, die wirklich Ahnung haben und unkompliziert helfen ;)

Daanke!

Mfg
Andy
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben