Рисование анимации на шоу JDialog - PullRequest
5 голосов
/ 02 сентября 2008

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

Однако, поскольку JDialog является модальным для родителя, я не смог найти способ закачать события рисования в EDT до того, как JDialog станет видимым, поскольку текущее событие в EDT не было завершено еще.

Ответы [ 4 ]

1 голос
/ 18 сентября 2008

Может быть, вы посмотрите на проект SwingWorker, который включен в JSE 6. (ссылка на SwingWorker) В книге "Filthy Rich Client", которую я читаю в настоящее время, они используют этот инструмент много. Может быть, вы можете найти подсказку в примерах на сайте книг: http://filthyrichclients.org/

1 голос
/ 02 сентября 2008

Вы пытаетесь показать JDialog независимо от анимации? Чтобы правильно установить порядок, вам может потребоваться объединить эти действия в исполняемый файл, который сразу передается в EDT.

например:

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

Лучше всего создать подкласс JDialog, чтобы можно было просто добавить логику doAnnimation () в метод setVisible (..) или show () перед вызовом реализации суперкласса.

Наконец, я полагаю, вам нужно будет вручную установить размеры журнала - я не помню, будет ли Java знать фактический размер диалогового окна, прежде чем он будет показан, так что вы можете получить некоторую бесполезную информацию для вашего анимация, если вы запрашиваете размер перед его отображением.

0 голосов
/ 08 сентября 2010

Одна из возможностей - нарисовать свой собственный диалог на стеклянной панели. Тогда вы полностью контролируете диалог и можете рисовать все, что захотите. Вот учебник по созданию анимации на стеклянной панели.

0 голосов
/ 04 сентября 2008

Вы можете взять ответ @ 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 (), но оно должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...