validate()
: En Swing cuando crea 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 al validate()
en contenedores, validará el contenedor (si no es válido) llamando a su método doLayout()
, que generalmente 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()
: revalidate()
se llama cuando se cambia un atributo que afectaría a su ancho/alto y se llama a repintado() cuando se cambia un atributo que afectaría su aspecto. Por ejemplo, si su JFrame
contiene un JPanel
, ahora en un determinado momento quitó ese JPanel
e insertó uno nuevo en su lugar, dependiendo del contenido del recién colocado JPanel
, el tamaño de los componentes dentro del JPanel
como así como The CONTAINER
mismo (en virtud del administrador de diseño utilizado por él), cambia. Lo cual lo empuja al estado inválido. Entonces, para validar este cambio, debe llamar explícitamente al revalidate()
.
invalidate()
: Esto es algo que nunca he usado, por lo que puede que no haya mucha información que pueda proporcionar al respecto. Pero parece que los escenarios presentados anteriormente pueden dar una pista sobre lo que ocurre cuando se usa invalidate()
.
Creo que 'invalidate()' es útil cuando estás actualizando varios componentes y quieres marcarlos como inválidos antes de recalcular el diseño con 'revalidate()' o 'validate()'. – Qix
@Qix: en mi humilde opinión, no hay necesidad de llamar a [invalidate()] (http://docs.oracle.com/javase/8/docs/api/java/awt/Component.html#invalidate--) ya que, se está llamando automáticamente. Además, [revalidate()] (http://docs.oracle.com/javase/8/docs/api/java/awt/Component.html # revalidate--) mismo hará esa tarea (Como se indica en los Documentos de Java, actúa como el método conveniente para llamar a 'invalidate()' y 'validate()'). –