Фиксированный размер панели в рамке

Я добавил некоторые компоненты в JPanel, который настроен на макет сетки, и я добавляю их в JFrame, который настроен на макет границы. Но хочу поправить размер панели. Когда мое окно развернуто, размер всех компонентов увеличивается. Я хочу, чтобы панель находилась в центре окна с фиксированным размером, даже если окно развернуто.


person user1415043    schedule 25.05.2012    source источник
comment
пожалуйста, помогите мне с кодированием Пожалуйста, ответьте на вопрос и приложите все усилия. SO - это не машина для генерации кода. Кстати - не используйте форматирование кода для текста и проверьте форматы сообщений, как вы ожидаете в предварительном просмотре. Голосование закрыто.   -  person Andrew Thompson    schedule 25.05.2012
comment
Если вы предоставите какой-то код, будет лучше. Например, я бы посмотрел в ваш код, чтобы узнать, вызываете ли вы setPreferredSize и где именно.   -  person Radu Murzea    schedule 25.05.2012
comment
Если панель содержит читаемый человеком текст, не делайте этого! Метрики шрифтов различаются в зависимости от платформы.   -  person trashgod    schedule 25.05.2012


Ответы (3)


Поместите панель с GridLayout как единый компонент на GridBagLayout без ограничений - она ​​будет по центру. Добавьте панель с GBL в CENTER BorderLayout.

См. этот пример для изображения выше.


Пример вложенного макета также использует GBL для центрирования изображения в нижней части области прокрутки справа.

person Andrew Thompson    schedule 25.05.2012

Что ж, тогда вам не следует использовать BorderLayout, потому что это просто соответствует дочерним компонентам. Если вы все еще хотите использовать BoderLayout в JFrame (потому что вам нужна боковая панель или что-то в этом роде), вы можете просто обернуть свою JPanel (с помощью GridLayout ) в другой JPanel с помощью GridBagLayout или BoxLayout или чего-то подобного, а затем поместите этот другой JPanel в JFrame.

JPanel innerPanel = new JPanel();
innerPanel.setLayout(new GridLayout());
// fill and set your innerPanel

JPanel middlePanel = new JPanel();
middlePanel.setLayout(new GridBagLayout());
middlePanel.add(innerPanel, constraintsThatPlaceItWhereYouWantIt);

JFrame yourFrame = new JFrame();
yourFrame.setLayout(new BorderLayout());
yourFrame.add(middlePanel, BorderLayout.CENTER);
person brimborium    schedule 25.05.2012
comment
middlePanel.add(innerPanel, constraintsThatPlaceItWhereYouWantIt); См. Мой ответ, почему constraintsThatPlaceItWhereYouWantIt является избыточным для центрирования компонента в GBL. Он ссылается на пример кода. - person Andrew Thompson; 25.05.2012
comment
Вы правы, но я все равно всегда ставлю ограничения при добавлении из-за удобочитаемости. И он мог бы сделать с этим более продвинутые вещи относительно размещения. - person brimborium; 25.05.2012
comment
Как насчет последней строчки: yourFrame.add(middlePanel, BorderLayout.CENTER);? Не могли бы вы также пропустить BorderLayout.CENTER? Я бы не стал, хотя в этом нет необходимости. - person brimborium; 25.05.2012

person    schedule
comment
1) Используйте форматирование кода 2) Это редко, если вообще, ответ. -1 - person Andrew Thompson; 25.05.2012
comment
По крайней мере, в этом случае это не поможет. - person brimborium; 25.05.2012