2008-09-02 18 views
5

¿Cuál sería la mejor manera de dibujar una animación simple justo antes de mostrar un JDialog modal? (es decir, expandir fronteras desde el punto de clic del mouse hasta la ubicación del diálogo). Pensé que sería posible dibujar sobre el cristal de la estructura principal en el método setVisible del diálogo.animaciones de dibujo en el show de JDialog

Sin embargo, dado que el JDialog es modal para el padre, no pude encontrar una forma de bombear eventos de dibujo en EDT antes de que el JDialog se vuelva visible ya que el evento actual en el EDT no se ha completado todavía.

Respuesta

1

¿Está tratando de mostrar el JDialog de forma independiente de la anotación? Con el fin de obtener el orden establecido correctamente, es posible que deba agrupar esas acciones en un ejecutable que se pasa al EDT de una vez.

por ejemplo:

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

Puede ser mejor subclase JDialog para que sólo se puede añadir la lógica doAnnimation() al método show() setVisible (..) o antes de llamar a la implementación de la superclase.

Finalmente, me imagino que tendrá que establecer las dimensiones del dalog manualmente. No recuerdo si Java conocerá el tamaño real del diálogo antes de que se muestre, por lo que puede obtener información inútil para su anotación si consulta el tamaño antes de mostrarlo.

0

Es posible que pueda tomar la respuesta de @ rcreswick y ampliarla un poco para que funcione.

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 bastante feo y se tendría que ejecutar en lugar de la llamada básica showDialog(), pero debería funcionar.

1

Tal vez tenga un vistazo al Proyecto SwingWorker que se incluye en JSE 6. (Link to SwingWorker) En el libro "Cliente rico asqueroso" que estoy leyendo en este momento usan mucho esta herramienta. Tal vez se puede encontrar una pista en los ejemplos en el sitio web de libros: http://filthyrichclients.org/

0

Una posibilidad es pintar su propio diálogo sobre el cristal. Entonces usted tiene el control total del diálogo y puede pintar lo que quiera. Here's a tutorial on creating animations en el panel de vidrio.