Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
17.05.2006, 02:55
feigling



Hi,

ich weiß nicht, wie ich den Thread hier genau nennen soll, aber ich hoffe mal, es wird gleich ersichtlich, wo mein Problem liegt und zwar möchte ich via JOptionPane und createDialog ein Dialogfenster erstellen und anzeigen. Das ist nicht weiter schwierig.

Quellcode:import javax.swing.*;

public class Main
{
    public static void main(String[] args)
    {    
        JOptionPane pane = new JOptionPane(new Object[]{"test text"});
                  
        JDialog dialog = pane.createDialog(null, "test caption");
        dialog.setModal(false);
        dialog.pack();
        dialog.setVisible(true);
    }
}
Funktioniert auch alles einwandfrei.

Nun allerdings muss ich das in Verbindung bringen mit SwingUtilities.invokeLater. Das habe ich auf folgende Weise probiert:

Quellcode:import javax.swing.*;

public class Main
{
    public static void main(String[] args)
    {    
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
               {
                JOptionPane pane = new JOptionPane(new Object[]{"test text"});
                  
                JDialog dialog = pane.createDialog(null, "test caption");
                dialog.setModal(false);
                dialog.pack();
                dialog.setVisible(true);
                
                try
                {
                    Thread.sleep(3000);
                }
                catch(Exception e)
                {
                    e.printStackTrace();
                }
                
                System.exit(0);
               }
        });        
    }
}
Das Problem hierbei ist, dass das Dialogfenster so aussieht:

also das Fenster garnicht richtig aufgebaut wird. Und zwar liegt das an SwingUtilities.invokeLater. Das Problem ist jetzt aber, dass im eigentlichen Projekt dieses invokeLater benutzt werden muss (soweit ich weiß - den Teil hat jemand anders gemacht ;x)

Funktionieren tut es, wenn ich das Fenster modal mache, allerdings wird Code nach dialog.setVisible(true); natürlich erst ausgeführt, wenn ich auf den Button im Dialog geklickt habe. Im richtigen Projekt wird es da allerdings keinen Button geben. Naja, langer Text, kurze Frage: Weiß jemand, wie ich das Fenster korrekt anzeigen lasse mit SwingUtilities.invokeLater und ohne das Fenster modal zu setzen? ich habe da jetzt bestimmt 10 Stunden dran gesessen und probiert und es jetzt soweit einschränken können wie oben zu sehen ist. Ich weiß so langsam nicht mehr weiter. Was ich weiß ist, dass Swing nicht threadsave ist und dass man darum SwingUtilities.invokeLater benutzt, daher verstehe ich nicht, warum es zu so nem Anzeigenfehler kommt.

(Und kein Kriz im Chat, wenn man ihn braucht >:P)

€dit: Das

Quellcode:try
                {
                    Thread.sleep(3000);
                }
                catch(Exception e)
                {
                    e.printStackTrace();
                }
könnte man auch rauslassen, allerdings sieht man den Dialog dann natürlich nur ganz kurz. Also am Sleep liegt das nicht, dass der Dialog falsch dargestellt wird.

--


Dieser Beitrag wurde am 17.05.2006 um 06:37 von feigling bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
001
17.05.2006, 06:49
Kriz



Ich glaube, daß ein von JOptionPane erzeugter Dialog immer modal ist, denn die Pane ist ja von Natur aus auch immer modal (muß sie ja auch). In der Ref steht bspw. auch, daß man ein aus der Pane erzeugten Dialog nicht resizen kann, außer man setzt das Feature über die Dialoginstanz explizit wieder in Gang.

Ich habe auch mit den alten Settings und den neuen 1.6er Settings rumgespielt, aber sobald der Dialog modeless war, funzte die Sache nicht mehr. Soweit ich das rausbekommen habe, ist zwar der Dialog an sich bereits fertig, aber seine Komponenten sind noch nicht soweit, daß sie gezeichnet werden können. Daher kommt da auch nichts.

Ich glaube, da bleibt dir wohl nichts anderes übrig, als die Natur der Pane zu respektieren und den erzeugten Dialog modal zu lassen...

---

Und wenn du nun anstatt der Pane den Dialog direkt bastelst? An sich brauchst du ja nur den Dialog an sich ohne die Pane. Ist zwar ein wenig Bastelei, aber eventuell umgehst du so das erzwungene Modelverhalten der Pane.

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)


Dieser Beitrag wurde am 17.05.2006 um 06:51 von Kriz bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
002
17.05.2006, 06:59
feigling



Oh, ein Frühaufsteher =)

"Ich habe auch mit den alten Settings und den neuen 1.6er Settings rumgespielt, aber sobald der Dialog modeless war, funzte die Sache nicht mehr. Soweit ich das rausbekommen habe, ist zwar der Dialog an sich bereits fertig, aber seine Komponenten sind noch nicht soweit, daß sie gezeichnet werden können. Daher kommt da auch nichts."

Das wusste ich nicht. Modal kann ich den Dialog nicht machen, weil ich den dann nicht mehr beenden kann (kein Button im eigentlichen Dialog). Naja, erzeuge ich halt den Dialog selber. So viel mehr ist das ja auch nicht. Und so lange das dann funktioniert :D

Danke für den Hinweis. Wenn das dann immer noch nicht laufen sollte, melde ich mich nochmal.

--

zum Seitenanfang zum Seitenende Profil || Suche
003
17.05.2006, 08:45
Kriz



Hm... Also ich hab hier nen Code, der funzt zumindest auf Win2000 mit JDK 1.6 problemlos :)

Rufe setModal(false) erst NACH setVisible(true) auf.

Alles Quatsch o_O

Nach setVisible(true) werden sowieso alles Zusatzkonfigs an den Dialog ignoriert, er ruft also so nur das voreingestellte setModal(true) auf...

Wie auch immer, auch ein eigenständiger Dialog ohne Pane-Quelle wird nicht korrekt angezeigt. Tja... Da kann ich dir leider auch nicht weiterhelfen. Da solltest du mal direkt Javafreaks ansprechen, evtl. bei www.tutorials.de

:(

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)


Dieser Beitrag wurde am 17.05.2006 um 08:56 von Kriz bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
004
17.05.2006, 15:49
feigling



Mhh ich probiere es gleich selber nochmal mit nem eigenen Dialog. Danach gucke ich dann mal bei www.tutorials.de. Nochmals danke.

--

zum Seitenanfang zum Seitenende Profil || Suche