Что такое действительный контейнер?

57
5

Что означает "действительный" в этом контексте?
http://docs.oracle.com/javase/tutorial/uiswing/layout/howLayoutWorks.html

Контейнер может быть действительным (а именно, isValid() возвращает true) или недействительным. Для того, чтобы контейнер был действительным, все дети контейнера должны быть выложены уже и все они должны быть действительными. Метод Container.validate может использоваться для проверки недопустимого контейнера. Этот метод запускает макет для контейнера и всех дочерних контейнеров вниз по иерархии компонентов и маркирует этот контейнер как действительный.

спросил(а) 2012-03-20T17:32:00+04:00 8 лет, 6 месяцев назад
1
Решение
69

isValid() 

Указывает, что иерархия контейнера была правильно выбрана, как это определено менеджером компоновки (например, BorderLayout), например, если вы удалили JButton из JPanel во время выполнения, тогда вы должны вызвать validate() или revalidate() Это говорит о том, что Swing layout manager для пересчета макета текущего контейнера и запускает рекурсивное действие по дереву.

Просто обратите внимание, что revalidate() совпадает с вызовом invalidate(), а затем validate(). Эти операции для вложенного revalidate() могут быть дорогими.

ответил(а) 2012-03-20T17:48:00+04:00 8 лет, 6 месяцев назад
70

В Swing при создании компонента он недействителен, т.е. Его действительное свойство является ложным. Компонент считается действительным, когда определяется его ширина, высота, местоположение и прочее. Обычно это делается путем прямого или косвенного вызова метода validate(). Когда мы вызываем validate() в контейнерах, он проверяет контейнер (если он недействителен), вызывая его метод doLayout(), который обычно вызывается LayoutManager. Теперь каждый ребенок, помещенный в этот контейнер, будет рекурсивно проверен, так что все дерево будет выложено и станет действительным.

ответил(а) 2012-03-20T17:46:00+04:00 8 лет, 6 месяцев назад
72

"Действителен" является атрибутом контейнера. Контейнер может быть действительным или недействительным. Если C1 и C2 являются контейнерами, а C2 находится внутри C1 и C2 недействителен, C1 также недействителен. Если вы вызываете C1.validate(), C2 также станет действительным. Заметим, что C1 недействителен, если C2 уже не выложен.

ответил(а) 2012-03-20T17:41:00+04:00 8 лет, 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема