2012-03-01 18 views

Odpowiedz

58

invalidate() oznacza kontener jako nieprawidłowy. Oznacza, że ​​treść jest w jakiś sposób błędna i musi zostać ponownie ułożona. Ale to tylko rodzaj znaku/flagi. Możliwe, że wiele nieprawidłowych kontenerów musi zostać odświeżonych później.

validate() wykonuje przekazanie. Oznacza to, że żądana jest nieprawidłowa zawartość dla wszystkich rozmiarów, a wszystkie rozmiary podkomponentów są ustawione na odpowiednie wartości przez LayoutManager.

revalidate() to tylko suma obu. Oznacza on kontener jako nieprawidłowy i wykonuje układ kontenera.

61

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().

+1

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

+0

@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()'). –