invalidate()marca el contenedor como inválido. Significa que el contenido es incorrecto de alguna manera y debe ser reorganizado. Pero es solo una especie de marca / bandera. Es posible que más tarde se deban actualizar varios contenedores no válidos.
validate()realiza la retransmisión. Significa que se solicita contenido no válido para todos los tamaños y que LayoutManager establece los valores adecuados para todos los tamaños de los subcomponentes.
revalidate()es solo la suma de ambos. Marca el contenedor como no válido y realiza el diseño del contenedor.
ACTUALIZAR:
Algún código de Component.java
publicvoid revalidate(){
revalidateSynchronously();}/**
* Revalidates the component synchronously.
*/finalvoid revalidateSynchronously(){synchronized(getTreeLock()){
invalidate();Container root = getContainer();if(root ==null){// There's no parents. Just validate itself.
validate();}else{while(!root.isValidateRoot()){if(root.getContainer()==null){// If there's no validate roots, we'll validate the// topmost containerbreak;}
root = root.getContainer();}
root.validate();}}}
revalidate()no llama doLayout(), lo que validate()hace. Por lo tanto, no es realmente una suma de ambos, revalidateno siempre es un reemplazo válido para validate.
En este caso, supongo (nunca lo intenté) RepaintManager llamará a validate
StanislavL
Estaba lidiando con un error feo y reemplazando revalidate con validate (que llama a doLayout) lo resolvió ...
Meo
¿Cómo podemos llamar a validate () desde un método estático?
Kunal Tyagi
69
validate(): En Swing, cuando crea un componente, no lo es, es validdecir, su propiedad válida es false. Se dice que un componente es válido cuando se ha determinado su ancho, alto, ubicación y cosas. Esto generalmente se hace llamando a su validate()método, directa o indirectamente. Cuando llamamos validate()a contenedores, validará el contenedor (si no es válido) llamando a su doLayout()método, que normalmente invocará el LayoutManager. Ahora, cada niño colocado en este contenedor se validará de forma recursiva, de modo que todo el árbol se distribuirá y será válido.
revalidate(): revalidate()se debe llamar cuando cambia un atributo que afectaría su ancho / alto y llamar a repaint () cuando cambia un atributo que afectaría su apariencia. Por ejemplo, si JFramecontiene un JPanel, ahora en un momento determinado lo eliminó JPanele insertó uno nuevo en su lugar, dependiendo del contenido del recién colocado JPanel, el tamaño de los componentes dentro del JPanely él The CONTAINERmismo (en virtud de del administrador de diseño utilizado por él), cambios. Lo que lo empuja al estado inválido. Entonces, para validar este cambio, debe llamar explícitamente 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 de lo que sucede al usar invalidate().
Creo que invalidate()es útil cuando está actualizando varios componentes y desea marcarlos como no válidos antes de volver a calcular finalmente el diseño con revalidate()o validate().
Qix - MONICA FUE MALTRATADA
1
@Qix: En mi humilde opinión, no es necesario llamar a invalidate () ya que se llama automáticamente. Además, revalidate () en sí mismo hará esa tarea (como se indica en Java Docs, actúa como el método conveniente para llamar a ambos invalidate ()y validate ()).
revalidate()
no llamadoLayout()
, lo quevalidate()
hace. Por lo tanto, no es realmente una suma de ambos,revalidate
no siempre es un reemplazo válido paravalidate
.validate()
: En Swing, cuando crea un componente, no lo es, esvalid
decir, su propiedad válida esfalse
. Se dice que un componente es válido cuando se ha determinado su ancho, alto, ubicación y cosas. Esto generalmente se hace llamando a suvalidate()
método, directa o indirectamente. Cuando llamamosvalidate()
a contenedores, validará el contenedor (si no es válido) llamando a sudoLayout()
método, que normalmente invocará elLayoutManager
. Ahora, cada niño colocado en este contenedor se validará de forma recursiva, de modo que todo el árbol se distribuirá y será válido.revalidate()
:revalidate()
se debe llamar cuando cambia un atributo que afectaría su ancho / alto y llamar a repaint () cuando cambia un atributo que afectaría su apariencia. Por ejemplo, siJFrame
contiene unJPanel
, ahora en un momento determinado lo eliminóJPanel
e insertó uno nuevo en su lugar, dependiendo del contenido del recién colocadoJPanel
, el tamaño de los componentes dentro delJPanel
y élThe CONTAINER
mismo (en virtud de del administrador de diseño utilizado por él), cambios. Lo que lo empuja al estado inválido. Entonces, para validar este cambio, debe llamar explícitamenterevalidate()
.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 de lo que sucede al usarinvalidate()
.fuente
invalidate()
es útil cuando está actualizando varios componentes y desea marcarlos como no válidos antes de volver a calcular finalmente el diseño conrevalidate()
ovalidate()
.invalidate ()
yvalidate ()
).