Как заставить BoxLayout вести себя как вертикальный FlowLayout?

FlowLayout выполняет "давление" справа, так как все компоненты пытаются занять минимальную ширину. Напротив, BoxLayout пытается распределить все компоненты, чтобы заполнить всю высоту пространства.

Могу ли я добавить наполнитель в качестве последнего компонента или что-то еще, чтобы все компоненты имели минимальную высоту в BoxLayout?


person Suzan Cioc    schedule 29.09.2012    source источник
comment
их минимальная ширина no: FlowLayout всегда сохраняет их в prefSize :) В BoxLayout добавьте клей в конце или убедитесь, что дочерние элементы реализуют max до чего-то разумного. В долгосрочной перспективе лучше всего использовать более мощный layoutManager, т.е. Миглайаут   -  person kleopatra    schedule 29.09.2012
comment
Я бы использовал макет сетки с пустыми метками для настройки рамки, это не самый простой способ, но без каких-либо других вариантов, это лучше, чем ничего =)   -  person Victor R. Oliveira    schedule 10.10.2013
comment
сам не пробовал, но вы можете взглянуть на этот code.google.com/p/verticalflowlayout/downloads/   -  person Bastiat    schedule 13.11.2013


Ответы (1)


Вы можете использовать Box.createGlue(), который возвращает компонент, который занимает столько места, сколько ему дает BoxLayout. Добавление его в нижнюю часть вертикального BoxLayout приведет к сжатию других компонентов наверху.

Вы также можете использовать вложенные макеты.

person Kevin Workman    schedule 26.11.2013
comment
Теперь вы должны иметь возможность комментировать сколько душе угодно. :) - person Andrew Thompson; 01.01.2014
comment
Ура! С новым годом меня! :D - person Kevin Workman; 02.01.2014
comment
РЖУ НЕ МОГУ! Кто-нибудь, кроме (вас и) профессора Фарнсворта, использует это выражение? ;) О, и счастливого вам нового года. :) - person Andrew Thompson; 02.01.2014
comment
Это, к сожалению, не будет иметь желаемого эффекта, если другие компоненты коробки готовы занимать больше места, чем им нужно, например. JPanel или JComboBox. Тогда клей займет ровно столько места, сколько остальные компоненты, а не все, что осталось. - person Zsar; 21.01.2016
comment
@Zsar Рискуя быть педантичным, клей по-прежнему занимает столько места, сколько ему дает BoxLayout - просто BoxLayout не дает ему места. - person Kevin Workman; 21.01.2016
comment
Он по-прежнему занимает столько же места, сколько и самый большой другой компонент. Ни то, ни другое не помогает заставить BoxLayout вести себя как вертикальный FlowLayout, вот в чем вопрос. ... Я думаю, что я здесь педантичен, потому что у меня такая же проблема (как и у многих других людей; очень похожие вопросы повсюду), и никто никогда не отвечал на хорошее решение. На самом деле, это выглядит очень похоже на дубликат OP здесь. - person Zsar; 21.01.2016