java - tutorial - Diferencia entre validate(), revalidate() e invalidate() en la GUI de Swing
using swing in java (2)
invalidate()
marca el contenedor como no válido. Significa que el contenido de alguna manera es incorrecto y debe ser replanteado. Pero es solo una especie de marca / bandera. Es posible que varios contenedores no válidos se actualicen más tarde.
validate()
realiza relayout. Significa que se solicita contenido no válido para todos los tamaños y LayoutManager establece todos los tamaños de los subcomponentes en los valores correctos.
revalidate()
es solo la suma de ambos. Marca el contenedor como no válido y realiza el diseño del contenedor.
Los componentes Swing tienen múltiples métodos relacionados con las actualizaciones del diseño de la pantalla, en particular:
La documentación de Java los define de alguna manera desde una perspectiva técnica, pero no está particularmente claro cómo se deben usar.
¿Cuál es la diferencia entre estos y en qué circunstancias debe usar uno en lugar de los demás?
validate()
: en Swing cuando creas un Componente, no es valid
es decir, su propiedad válida es false
. Se dice que un componente es válido cuando se ha determinado su ancho, altura, ubicación y demás. Esto generalmente se hace llamando a su método validate()
, directa o indirectamente. Cuando llamamos a validate()
en los contenedores, validará el contenedor (si no es válido) llamando a su método doLayout()
, que típicamente invocará el LayoutManager
. Ahora cada niño colocado en este contenedor se validará recursivamente, de modo que todo el árbol se distribuirá y será válido.
revalidate()
: se debe invocar revalidate()
cuando se cambia un atributo que afectaría su ancho / alto y llamar a repintado () cuando se cambia un atributo que afectaría su aspecto. Por ejemplo, si su JFrame
contiene un JPanel
, ahora en un cierto momento quitó ese JPanel
e insertó uno nuevo en su lugar, dependiendo del contenido del JPanel
recién colocado, el tamaño de los componentes dentro del JPanel
también como The CONTAINER
sí (en virtud del administrador de diseño utilizado por él), cambia. Lo cual lo empuja al estado inválido. Por lo tanto, para validar este cambio, debe llamar explícitamente a revalidate()
.
invalidate()
: Esto es algo que nunca he usado, por lo que es posible que no haya mucha información al respecto. Pero parece que los escenarios presentados anteriormente pueden dar una pista de lo que ocurre cuando se usa invalidate()
.