Может ли Box Layout принимать размер включенных элементов? - PullRequest
0 голосов
/ 29 марта 2010

Я использовал myPanel.setLayout(new BoxLayout(myPanel, BoxLayout.Y_AXIS)); для заказа панелей по вертикали (одна под другой). Но myPanel, определенный указанным способом, изменяет включенную панель. Более подробно, он пытается установить одинаковую высоту и ширину для включенных панелей. Можно ли это изменить? Может ли BoxLayout принять размер включенных элементов?

ДОБАВЛЕНО:

Итак, как рекомендуется, давайте прочитаем документацию:

BoxLayout пытается организовать компоненты в их предпочтительной ширине (для горизонтального расположения) или высоты (для вертикальной компоновки). Для горизонтальное расположение, если не все компоненты одинаковой высоты, BoxLayout пытается сделать все компоненты так высоко, как самые высокие составная часть. Если это невозможно для конкретный компонент, то BoxLayout выравнивает этот компонент по вертикали, в соответствии с Y компонента выравнивание. По умолчанию компонент имеет Y выравнивание 0,5, что означает, что вертикальный центр компонента должна иметь ту же координату Y, что и вертикальные центры других компоненты с выравниванием 0,5 Y.

В моем случае у меня есть макет Y_AXIS. Это «вертикальный» макет? Если это так, компоненты должны быть расположены на своих предпочтительных высотах. Что такое «предпочтительные высоты»?

Далее написано «для горизонтальной компоновки, если не все компоненты имеют одинаковую высоту, BoxLayout пытается сделать все компоненты такими же высокими, как самый высокий компонент». Итак, я предполагаю, что для вертикальной компоновки. BoxLayout постарается сделать все компоненты такими же широкими, как и самый широкий. Правильно? А как насчет «предпочтительных высот», используемых в вертикальной компоновке?

Также написано, что если невозможно, чтобы горизонтальная компоновка сделала все компоненты такими же высокими, как самый высокий компонент, это выровняет компонент по вертикали. Что значит «выровнять по вертикали»? Разве не странно, что горизонтальное расположение выравнивает компонент по вертикали?

ДОБАВЛЕНО 2:

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

Ответы [ 2 ]

1 голос
/ 29 марта 2010

Используйте взамен GridBagLayout . Настройка вручную затруднительна, но есть инструменты, которые могут написать ограничения для вас (в первую очередь, конструктор GUI NetBeans), и это дает вам полный контроль над тем, как каждый из компонентов растягивается и располагается.

Вы можете установить выравнивания, заливки, вставки, поля, как распределяется свободное пространство, как будут рассчитываться окончательные границы и так далее. И не так сложно написать циклический код для добавления целых наборов компонентов с похожими ограничениями в строках или столбцах.

0 голосов
/ 29 марта 2010

Из Javadoc :

BoxLayout пытается организовать компоненты на их предпочтительной ширине (для горизонтального расположения) или высоты (для вертикальной компоновки) . Для горизонтальное расположение, если не все компоненты одинаковой высоты, BoxLayout пытается сделать все компоненты так высоко, как самые высокие составная часть. Если это невозможно для конкретный компонент, то BoxLayout выравнивает этот компонент по вертикали, в соответствии с Y компонента выравнивание. По умолчанию компонент имеет Y выравнивание 0,5, что означает, что вертикальный центр компонента должна иметь ту же координату Y, что и вертикальные центры других компоненты с выравниванием 0,5 Y.

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