validate(): В Swing, когда вы создаете Компонент, это не validто, что его действительное свойство false. Компонент считается действительным, если определены его ширина, высота, расположение и прочее. Обычно это делается путем validate()прямого или косвенного вызова их метода. Когда мы вызываем validate()контейнеры, он проверяет контейнер (если он недействителен), вызывая его doLayout()метод, который обычно вызывает LayoutManager. Теперь каждый дочерний элемент, помещенный в этот контейнер, будет проверяться рекурсивно, так что все дерево будет выложено и станет действительным.
revalidate(): revalidate()должен вызываться, когда вы изменяете атрибут, который может повлиять на их ширину / высоту, и вызывать repaint (), когда вы меняете атрибут, который может повлиять на их внешний вид. Например, если ваш JFrameсодержит a JPanel, теперь в определенный момент вы удалили его JPanelи вставили на его место новый, в зависимости от содержимого вновь размещенного JPanel, размера компонентов внутри, JPanelа также The CONTAINERсамого себя (в силу используемого им менеджера по расположению), изменяется. Что переводит его в недопустимое состояние. Итак, чтобы подтвердить это изменение, вы должны явно вызвать revalidate().
invalidate(): Это то, чем я никогда не пользовался, поэтому я могу немного рассказать об этом. Но похоже, что представленные выше сценарии могут дать небольшой намек на то, что происходит при использовании invalidate().
revalidate()не звонитdoLayout(), а звонитvalidate(). Так что на самом деле это не сумма обоих -revalidateне всегда правильная заменаvalidate.