Я добавил некоторые компоненты в JPanel
, который настроен на макет сетки, и я добавляю их в JFrame
, который настроен на макет границы. Но хочу поправить размер панели. Когда мое окно развернуто, размер всех компонентов увеличивается. Я хочу, чтобы панель находилась в центре окна с фиксированным размером, даже если окно развернуто.
Фиксированный размер панели в рамке
Ответы (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
middlePanel.add(innerPanel, constraintsThatPlaceItWhereYouWantIt);
См. Мой ответ, почему constraintsThatPlaceItWhereYouWantIt
является избыточным для центрирования компонента в GBL. Он ссылается на пример кода.
- person Andrew Thompson; 25.05.2012
Вы правы, но я все равно всегда ставлю ограничения при добавлении из-за удобочитаемости. И он мог бы сделать с этим более продвинутые вещи относительно размещения.
- person brimborium; 25.05.2012
Как насчет последней строчки:
yourFrame.add(middlePanel, BorderLayout.CENTER);
? Не могли бы вы также пропустить BorderLayout.CENTER
? Я бы не стал, хотя в этом нет необходимости.
- person brimborium; 25.05.2012
person
schedule
1) Используйте форматирование кода 2) Это редко, если вообще, ответ. -1
- person Andrew Thompson; 25.05.2012
По крайней мере, в этом случае это не поможет.
- person brimborium; 25.05.2012
setPreferredSize
и где именно. - person Radu Murzea   schedule 25.05.2012