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
.