P1: ¿cuál se debe usar cuando mi interfaz ha cambiado: pintar o invalidate?
Si el diseño no está actualizado debido a cambio de tamaño, cambio de fuente, etc., entonces debe llamar a invalidar. Al invalidar un componente, se invalida el componente y todos los elementos superiores se marcan como necesarios. Antes de pintar, en el paso de validación si no se encuentra ningún cambio, entonces el paso de pintura se omite.
Si hay alguna parte del componente que se está actualizando (definida por el rectángulo del clip del gráfico, llamado "dañado" región), entonces debería considerar llamar a volver a pintar. Una de las razones por las que pueden ocurrir regiones dañadas es la superposición de una parte de su componente debido a algún otro componente o aplicación. Según mi experiencia, el repintado() es más efectivo si lo llama en el componente interno más interno (es decir, usando public void repaint(int x, int y, int width, int height)
en lugar de usar void repaint()
público).
Q2: ¿cuándo deberían llamarse?
Invalidate():
marca un componente que no es válido - eso significa, que es la disposición es o no ser "actualizados" más: es decir, el componente cambia de tamaño, se añade un borde, que es cambios de fuente, etc. nunca debería necesitar llamar invalidate() a mano, ya que swing hace eso por usted prácticamente por cada cambio de propiedad.
Cuando es necesario repintar más de una región dentro del control, Invalidar hará que toda la ventana se vuelva a pintar en una sola pasada, evitando el parpadeo causado por repintados redundantes. No hay ninguna penalización en el rendimiento por invocar Invalidar varias veces antes de que el control se vuelva a pintar.
Repaint() :
Si el componente es liviano, este método llama al método de pintura de este componente lo antes posible. De lo contrario, este método provoca una llamada al método de actualización de este componente lo antes posible.
También tenga en cuenta el método Update
.
NOTA: Swing procesa las solicitudes de "repintado" de una manera ligeramente diferente de la AWT, aunque el resultado final para el programador de aplicaciones es esencialmente el mismo: se invoca paint().
, consultar el siguiente enlace para obtener un excelente enlace en cómo la pintura se realiza en AWT y Swing:
http://www.oracle.com/technetwork/java/painting-140037.html
Esperamos que esto ayude.
No diría que "invalidar" y "revalidar" son lo mismo. –