validate()
: W Swing kiedy utworzyć komponent, nie jest to jego valid
ważna właściwość jest false
. Mówi się, że podzespół jest ważny, gdy określono jego szerokość, wysokość, położenie i inne elementy. Zwykle odbywa się to przez bezpośrednie lub pośrednie wywołanie metody validate()
. Kiedy zadzwonimy na validate()
na kontenerach, sprawdzimy poprawność kontenera (jeśli jest on nieprawidłowy), wywołując jego metodę doLayout()
, która zwykle wywołuje LayoutManager
. Teraz każde dziecko umieszczone na tym pojemniku zostanie poddane rekursywnej walidacji, tak aby całe drzewo zostało ułożone i stanie się ważne.
revalidate()
: revalidate()
ma być wywoływana po zmianie atrybutu, który miałby wpływ na ich szerokość/wysokość i zadzwonić repaint() po zmianie atrybutu, który miałby wpływ na ich wygląd. Na przykład, jeśli Twój JFrame
zawiera JPanel
, teraz w pewnym momencie usunąłeś ten JPanel
i wstawiłeś nowy na miejsce, w zależności od zawartości nowo wstawionego JPanel
, rozmiaru komponentów wewnątrz JPanel
jako a także sama The CONTAINER
(na podstawie używanego przez nią menedżera układu), zmiany. Który popycha go do nieprawidłowego stanu. Aby zatwierdzić tę zmianę, musisz wyraźnie zadzwonić pod numer revalidate()
.
invalidate()
: To jest coś, czego nigdy nie używałem, więc może nie być zbyt wielu informacji, które mogę o nim powiedzieć. Wygląda jednak na to, że przedstawione powyżej scenariusze mogą dać pewną wskazówkę co do tego, co dzieje się podczas korzystania z invalidate()
.
Wierzę, że 'invalidate()' jest przydatne, gdy aktualizujesz kilka komponentów i chcesz oznaczyć je jako nieprawidłowe, zanim ostatecznie ponownie obliczymy układ za pomocą 'revalidate()' lub 'validate()'. – Qix
@Qix: IMHO, nie ma potrzeby wywoływania [invalidate()] (http://docs.oracle.com/javase/8/docs/api/java/awt/Component.html#invalidate--) ponieważ, jest automatycznie wywoływana. Ponadto, [revalidate()] (http://docs.oracle.com/javase/8/docs/api/java/awt/Component.html # revalidate--) samo zrobi to zadanie (jak stwierdzono w dokumentacji Java, działa jako wygodna metoda wywoływania zarówno 'invalidate()' jak i 'validate()'). –