Как лучше всего нарисовать простую анимацию непосредственно перед показом модального JDialog? (т.е. расширение границ от точки щелчка мыши до места в диалоговом окне). Я подумал, что можно будет рисовать на стекле родительского фрейма с помощью метода диалога setVisible.
Однако, поскольку JDialog является модальным для родителя, я не смог найти способ перекачивать события рисования в EDT до того, как JDialog станет видимым, поскольку текущее событие в EDT еще не завершено.




Вы пытаетесь показать JDialog независимо от аннимации? Чтобы правильно установить порядок, вам может потребоваться объединить эти действия в исполняемый файл, который сразу передается в EDT.
например:
SwingUtilities.invokeLater(new Runnable(){
public void run(){
doAnnimation();
showDialog();
}
}
Возможно, лучше всего создать подкласс JDialog, чтобы вы могли просто добавить логику doAnnimation () к методу setVisible (..) или show () перед вызовом реализации суперкласса.
Наконец, я предполагаю, что вам нужно будет установить размеры dalog вручную - я не помню, будет ли Java знать фактический размер диалогового окна до того, как он будет показан, поэтому вы можете получить бесполезную информацию для своей анонимности, если вы запросите размер, прежде чем показывать его.
Возможно, вы сможете взять ответ @ rcreswick и немного расширить его, чтобы он работал.
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();
}
Это довольно некрасиво, и его придется вызывать вместо основного вызова showDialog (), но он должен работать.
Может быть, вы посмотрите проект SwingWorker, который включен в JSE 6. (Ссылка на SwingWorker) В книге «Filthy Rich Client», которую я читаю, они часто используют этот инструмент. Возможно, вы найдете подсказку в примерах на сайте книг: http://filthyrichclients.org/
Одна из возможностей - нарисовать свой собственный диалог на стеклянной панели. Тогда у вас будет полный контроль над диалогом и вы сможете рисовать все, что захотите. Вот руководство по созданию анимации на стеклянной панели.