Использование frame.pack(), когда некоторые компоненты невидимы?

Я пытаюсь создать простой шаблон макета границы и использую frame.pack() для определения размера кадра. У меня есть невидимая метка в центральной области, и метод упаковки, похоже, не учитывает метку, поэтому она не отображается. Я знаю, что изначально это работает, потому что рама изначально имеет правильный размер для других компонентов. Итак, как я могу заставить рамку учитывать невидимую метку? Метка видна только тогда, когда выбрана кнопка в центральной области. Все работает, кроме того, что вам нужно вручную увеличить размер кадра, чтобы увидеть метку.


person liloka    schedule 18.10.2011    source источник
comment
Пожалуйста, опубликуйте SSCCE, показывающий вашу проблему.   -  person jfpoilpret    schedule 19.10.2011


Ответы (1)


Я думаю, что это зависит от менеджера компоновки контейнера, содержащего метку. Некоторые менеджеры компоновки вычисляют предпочтительный размер только на основе видимых компонентов, а другие принимают во внимание невидимые компоненты. GroupLayout, например, имеет метод setHonorsVisibility.

В любом случае, самый простой способ, вероятно, сделать метку невидимой после вызова pack.

См. также SetVisible(false) изменяет макет моих компонентов в моей панели

person JB Nizet    schedule 18.10.2011
comment
Я использую диспетчер компоновки Border и пытался вызвать пакет перед тем, как сделать метку невидимой, но я использую frame.pack(), который, как я предполагаю, устанавливает размер возвращаемого JPanel в кадр. Поэтому я не уверен, куда поместить frame.pack(). - person liloka; 19.10.2011