Автоматическое изменение размеров поворотных элементов в соответствии с размером контейнера - PullRequest
12 голосов
/ 14 сентября 2011

Не уверен, что то, что мне нужно, возможно.У меня есть контейнер (JPanel), который содержит некоторые внутренние элементы.Мне было интересно, можно ли заставить внутренние элементы соответствовать размеру контейнера.Мне нужно, чтобы они были полностью видны, т. Е. Изменили размер, чтобы соответствовать размеру панели, а не обрезали некоторые части внутренних элементов.

Прокрутка невозможна.

Возможно ли это с помощьюLayout или что-то?

EDIT: Важное уточнение: Дело в том, что у меня нет доступа ни к внутренним элементам, ни к их свойствам, поэтому я бы сказал, что Layoutmanager, способный изменять размеры дочерних элементов, чтобы соответствовать его размеру,необходимо.Я тестировал BorderLayout и GridBagLayout, но результат всегда одинаков, внутренние элементы вырезаны.

Ответы [ 5 ]

12 голосов
/ 14 сентября 2011

Именно по этой причине существуют LayoutManager .Все LayoutManagers работают напрямую с простыми контейнерами, за исключением GridBagLayout, который способен обрабатывать самые полные графические интерфейсы напрямую.

Для большинства конкурирующих графических интерфейсов у вас есть несколько вариантов:

  • Найдите 3-й макет детали , такой как MigLayout или здесь
  • Использование GridBagLayout
  • Очень простой способ - использовать вложенный макет , где имеется более одного JPanel и у каждого есть дочерний JPanels с одинаковыми или разными LayoutManager
  • или пользовательским макетом, должно быть трудно ..., но так же, как использование GridBagLayout
5 голосов
/ 14 сентября 2011

Вы можете установить макет JPanel на макет границы, а затем добавить одного дочернего элемента в центр. Если есть несколько дочерних элементов, этот подход становится менее полезным, так как компоненты, добавленные к NORTH, SOUTH, EAST и WEST, останутся статическими по размеру, в то время как центр изменится, чтобы заполнить остаток.

Короче говоря, это не идеальное решение. Вся верстка в Swing усложняется тем, что разные компоненты ведут себя по-разному, поэтому вам действительно необходимо предоставить дополнительную информацию о дочерних компонентах, которые вы хотите добавить на панель, и о любом поведении, которое было переопределено для этих компонентов. компоненты.

Лучший способ - попробовать пару простых примеров, чтобы увидеть, какое расстояние вы получите, и может ли помочь тонкая перестройка вложенности дочерних компонентов.

0 голосов
/ 25 апреля 2014

Я использовал JInternalFrame внутри JDesktopPane. Я хотел, чтобы internal_frame автоматически изменял размер при изменении размера панели рабочего стола, поэтому мне пришлось реализовать событие AncestorResized для внутреннего фрейма, где я поместил следующий код:

 this.setPreferredSize(this.getParent().getPreferredSize());
 this.pack();

и у меня это сработало :) 1004 *

0 голосов
/ 14 сентября 2011

для меня это звучит так, как будто вы должны просто заглянуть в соответствующий менеджер раскладки и использовать его.Например, посмотрите на BorderLayout - поместите ваш компонент в ЦЕНТР, и он займет всю площадь.Каждый конкретный менеджер компоновки должен решить, каким будет размер компонентов.Марка

0 голосов
/ 14 сентября 2011

вы можете использовать макет, например, GridBagLayout или BorderLayout, в зависимости от ситуации.При правильном весе это возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...