Hallo,
ich würde gerne eine kleine Animation abspielen, bevor ich einen JDialog öffne. Sagen wir, die Animation beschränkt sich zunächst erstmal auf das Bewegen eines JPanels von links nach rechts. Meine Frage bezieht sich weniger auf die Animation, sondern vielmehr darauf, wie ich es schaffe, die Animation zu starten und nach deren Ende den JDialog zu öffnen.
Nehmen wir mal folgenden Beispielcode (die Methode ist innerhalb einer Klasse, die von JDialog abgeleitet ist, die Klasse stellt einen modalen Dialog dar):
Die "***" Stelle ist noch besonders. Laut Java API Doku wird dort der aktuelle Thread angehalten und erst wieder fortgesetzt, wenn z.B. irgendwo "setVisible(false)" für den Dialog aufgerufen wird. Dies macht natürlich Sinn. Sehr entscheidend dabei ist, dass ein neuer "Event-Pump-Thread" bzw. "Event-Dispatching-Thread" vom Toolkit geöffnet wird (steht in der API Doku zu setVisible vom JDialog). Warum ist ja klar, damit die GUI nicht blockiert, wenn "setVisible(true)" blockiert.
Im Prinzip brauche ich genau dieses Verhalten auch für meine "playAnimation()" Methode. Diese soll aufgerufen werden und blockieren, d.h. erst zurückkehren, wenn die Animation fertig abgelaufen ist. Ich müsste dann aber auch selbst einen neuen Event-Dispatch-Thread aufmachen, damit die Event-Verarbeitung weiterhin funktioniert. Ich weiß nur leider nicht, wie das geht.
Hat jemand eine Idee, wie ich bei diesem Problem vorgehen könnte?
Über Hilfe würde ich mich sehr freuen.
Vielen Dank!
ich würde gerne eine kleine Animation abspielen, bevor ich einen JDialog öffne. Sagen wir, die Animation beschränkt sich zunächst erstmal auf das Bewegen eines JPanels von links nach rechts. Meine Frage bezieht sich weniger auf die Animation, sondern vielmehr darauf, wie ich es schaffe, die Animation zu starten und nach deren Ende den JDialog zu öffnen.
Nehmen wir mal folgenden Beispielcode (die Methode ist innerhalb einer Klasse, die von JDialog abgeleitet ist, die Klasse stellt einen modalen Dialog dar):
Code:
public void openDialog() {
playAnimation();
setVisible(true); // ***
dispose();
}
Die "***" Stelle ist noch besonders. Laut Java API Doku wird dort der aktuelle Thread angehalten und erst wieder fortgesetzt, wenn z.B. irgendwo "setVisible(false)" für den Dialog aufgerufen wird. Dies macht natürlich Sinn. Sehr entscheidend dabei ist, dass ein neuer "Event-Pump-Thread" bzw. "Event-Dispatching-Thread" vom Toolkit geöffnet wird (steht in der API Doku zu setVisible vom JDialog). Warum ist ja klar, damit die GUI nicht blockiert, wenn "setVisible(true)" blockiert.
Im Prinzip brauche ich genau dieses Verhalten auch für meine "playAnimation()" Methode. Diese soll aufgerufen werden und blockieren, d.h. erst zurückkehren, wenn die Animation fertig abgelaufen ist. Ich müsste dann aber auch selbst einen neuen Event-Dispatch-Thread aufmachen, damit die Event-Verarbeitung weiterhin funktioniert. Ich weiß nur leider nicht, wie das geht.
Hat jemand eine Idee, wie ich bei diesem Problem vorgehen könnte?
Über Hilfe würde ich mich sehr freuen.
Vielen Dank!