2012-06-01 695 views
5

Estoy jugando un poco con la clase de gráficos de Java y me preguntaba: ¿cuándo es necesario llamar al método repaint()? Intenté comentarlo y no pareció afectar mi GUI de salida. Sin embargo, he visto que se usa mucho en el código GUI de Java que he leído. ¿Alguien le importaría explicar cuándo usarlo y cuándo no usarlo?Método repaint() en Java

Respuesta

1

Nunca es realmente necesario en la mayoría de las aplicaciones de giro, ya que lo manejan automáticamente (para operaciones comunes como cambiar los valores de texto en los botones y agregar datos a un cuadro de lista).

En general, es solo si ha realizado algún tipo de cambio que el swing no se recuperará automáticamente; por ejemplo, no está utilizando un administrador de diseño y está redimensionando los componentes manualmente (porque normalmente el administrador del diseño repinta su componentes cuando sea necesario).

+0

¡Muchas gracias! –

0

Cuando inicia su aplicación, "pinta" su GUI.

Debe llamar al repaint() cuando desee volver a dibujar su GUI porque ha cambiado algo adentro.

Si desea eliminar un botón, necesita quitarlo (o hacerlo invisible), entonces necesita llamar al validate() o repaint() para volver a calcular (volver a dibujar) la GUI.

1

El repaint() actualiza la vista (componente), por lo que cada vez que realice algún cambio en el componente, debe llamarlo. Por ejemplo, si se gira el componente gráfico, se debe hacer una llamada a repaint() con el fin de ver el cambio en el componente que contiene

+0

¡Gracias por la explicación! De hecho, intento hacer que mi gráfico sea tal que cuando un usuario hace clic en el eje x (es un gráfico de velocidad del sonido) el gráfico se acerque a esa parte del gráfico en particular. Estoy un poco atascado en cuanto a cómo hacerlo. ¿Tienes alguna idea? –

+0

Esto es lo que probablemente haría: Obtener la coordinación del punto al que hice clic, dado por 'getX()' y 'getY()'. Luego crea un gráfico ** g ** que será el área que quiero mostrar y 'repain (g)'. –

0

La única cosa que puedo pensar:

new Thread() { 
    @Override 
    public void run() { 
    while (ClassName.this.isVisible()) { 
     ClassName.this.updateStatusLabel(); 
     ClassName.this.validate(); 
     ClassName.this.repaint(50L); 
     try { 
     Thread.sleep(1000); 
     } catch (final InterruptedException e) { 
     Log.log(e); 
     } 
    } 
    } 
}.start(); 

Suponga que tiene la encima del código en el constructor de un JDialog. Lo que updateStatusLabel hace es verificar una variable booleana, ya sea pública o configurable a través de un método, y establecer el icono de un JLabel en base a dicho booleano. Si no valida y vuelve a pintar la GUI, la modificación no se mostrará hasta que se produzca otro evento, muy probablemente desencadenado por el usuario. Y, si el usuario está esperando que la etiqueta muestre un determinado ícono por, digamos, que indica que si un dispositivo es accesible a través de Internet, él/ella nunca interactuará (o, al menos, está retrasando las interacciones). tanto).