2008-09-02 8 views
5

Was wäre der beste Weg, eine einfache Animation zu zeichnen, kurz bevor ein modaler JDialog angezeigt wird? (d. h. Erweiterung von Grenzen vom Mausklickpunkt zum Dialogort). Ich dachte, dass es möglich wäre, auf der Glasplatte des Elternrahmens auf der Methode setVisible des Dialogs zu zeichnen.Zeichnungsanimationen bei der Show von JDialog

Da der JDialog jedoch modal zum Elternknoten ist, konnte ich keine Möglichkeit finden, Zeichnungsereignisse in den EDT zu pumpen, bevor der JDialog sichtbar wird, da das aktuelle Ereignis auf dem EDT noch nicht abgeschlossen ist.

Antwort

1

Versuchen Sie, den JDialog unabhängig von der Annimierung anzuzeigen? Um die Reihenfolge richtig zu bestimmen, müssen Sie diese Aktionen möglicherweise in einem Runnable bündeln, das sofort an den EDT übergeben wird.

zB:

SwingUtilities.invokeLater(new Runnable(){ 
    public void run(){ 
     doAnnimation(); 
     showDialog(); 
    } 
} 

Es kann am besten sein JDialog Unterklasse, so dass Sie nur die doAnnimation() Logik zum setVisible (..) oder show() -Methode hinzufügen, bevor die übergeordnete Klasse Implementierung aufrufen.

Schließlich stelle ich mir vor, dass Sie die Dimensionen des Dialogs manuell einstellen müssen - ich weiß nicht mehr, ob Java die tatsächliche Größe des Dialogs kennt, bevor es angezeigt wird, so dass Sie möglicherweise nutzlose Informationen erhalten Ihre Annimierung, wenn Sie die Größe vor dem Anzeigen abfragen.

0

Sie können @ rcreswick's Antwort nehmen und etwas erweitern, damit es funktioniert.

void myShowDialog() { 
    new Thread(new Runnable() {public void run() { 
    SwingUtilities.invokeAndWait(new Runnable() { public void run() { 
     doAnimation(); 
    } }); 
    // Delay to wait for the animation to finish (if needed) 
    Thread.sleep(500); 
    SwingUtilities.invokeAndWait(new Runnable() { public void run() { 
     showDialog(); 
    } }); 
    } }).start(); 
} 

Es ist ziemlich hässlich und hätte anstelle der Grundshowdialog() Aufruf aufgerufen werden, aber es sollte funktionieren.

1

Vielleicht werfen Sie einen Blick auf das SwingWorker-Projekt, das in JSE 6 enthalten ist. (Link to SwingWorker) In dem Buch "Filthy Rich Client", das ich gerade lese, benutzen sie dieses Tool sehr. Vielleicht finden Sie einen Hinweis in den Beispielen auf der Bücher Website: http://filthyrichclients.org/

0

Eine Möglichkeit ist, einen eigenen Dialog auf der Glasscheibe zu malen. Dann haben Sie die volle Kontrolle über den Dialog und können malen, was Sie wollen. Here's a tutorial on creating animations auf der Glasscheibe.

Verwandte Themen