BoxLayout

BoxLayout

BoxLayout – это менеджер размещения.

При таком размещении компоненты размещаются в один ряд или одну колонку.

Пример использования BoxLayout:

xPanel = new JPanel();
xPanel.setLayout(new BoxLayout(xPanel, BoxLayout.X_AXIS));

здесь для панели определен менеджер размещения BoxLayout и указана константа X_AXIS, что означает, что компоненты панели будут размещены в один ряд.

Другой пример использования BoxLayout:

yPanel = new JPanel();
yPanel.setLayout(new BoxLayout(yPanel, BoxLayout.Y_AXIS));

здесь для панели определен менеджер размещения BoxLayout и указана константа Y_AXIS, что означает, что компоненты панели будут размещены в один столбец.

Кроме собственно элементов управления (кнопок, надписей и т.п.) можно добавлять невидимые компоненты, определяющие промежутки.

Добавим невидимую область rigidArea:

Component rigidArea = Box.createRigidArea(new Dimension(10, 10));
xPanel.add(rigidArea);

на картинке ниже отступ слева от надписи «Horizontal Panel X_AXIS» и есть эта область.

Высота горизонтальной панели xPanel определяется высотой самого высокого элемента, здесь это надпись «Horizontal Panel X_AXIS».

Между кнопками «Uno» и «Dos» имеется небольшой зазор. Он сделан с помощью горизонтальной распорки (strut):

Component horizontalStrut = Box.createHorizontalStrut(5);
xPanel.add(horizontalStrut);

Между кнопками «Dos» и «Tres» имеется большой зазор. Он сделан с помощью невидимого компонента, который расширяясь по горизонтали «расталкивает» элементы к краям панели:

Component horizontalGlue = Box.createHorizontalGlue();
xPanel.add(horizontalGlue);

такой заполнитель сработает, если для компонента указан максимальный размер, вот почему я ввел строку:

xLabel.setMaximumSize(new Dimension(30, 30));

попробуйте закомментировать эту строку и посмотрите на результат, horizontalGlue перестанет работать.

В вертикальной панели yPanel сделано всё аналогично, только вместо «horizontal» указано «vertical».

Ширина вертикальной панели yPanel определяется размером самого широкого элемента, здесь это надпись «Vertical Panel Y_AXIS».

Отступ слева от вертикальых кнопок определен в данном примере первым параметром в кострукторе Dimension в строке:

rigidArea = Box.createRigidArea(new Dimension(20, 10));

Ещё один момент. В примере закомментированы строки:

//xBt1.setAlignmentY(0.5f);
//xBt1.setAlignmentY(Component.BOTTOM_ALIGNMENT);
//xBt2.setAlignmentY(Component.BOTTOM_ALIGNMENT);
//xBt3.setAlignmentY(Component.TOP_ALIGNMENT);

//xBt1.setAlignmentY(1f);
//yLabel.setAlignmentX(Component.CENTER_ALIGNMENT);
//yBt1.setAlignmentX(Component.CENTER_ALIGNMENT);
//yBt2.setAlignmentX(Component.CENTER_ALIGNMENT);
//yBt3.setAlignmentX(Component.CENTER_ALIGNMENT);

параметр обеих функций «Alignment» изменяется от нуля до одного. Установка значений свойства «Alignment» меняет расположение компонента по отношению к другим компонентам.

Получаем: BoxLayout, Java

такой результат.