BoxLayout
BoxLayout – это менеджер размещения.
При таком размещении компоненты размещаются в один ряд или одну колонку.
Пример использования BoxLayout:
xPanel.setLayout(new BoxLayout(xPanel, BoxLayout.X_AXIS));
здесь для панели определен менеджер размещения BoxLayout и указана константа X_AXIS, что означает, что компоненты панели будут размещены в один ряд.
Другой пример использования BoxLayout:
yPanel.setLayout(new BoxLayout(yPanel, BoxLayout.Y_AXIS));
здесь для панели определен менеджер размещения BoxLayout и указана константа Y_AXIS, что означает, что компоненты панели будут размещены в один столбец.
Кроме собственно элементов управления (кнопок, надписей и т.п.) можно добавлять невидимые компоненты, определяющие промежутки.
Добавим невидимую область rigidArea:
xPanel.add(rigidArea);
на картинке ниже отступ слева от надписи «Horizontal Panel X_AXIS» и есть эта область.
Высота горизонтальной панели xPanel определяется высотой самого высокого элемента, здесь это надпись «Horizontal Panel X_AXIS».
Между кнопками «Uno» и «Dos» имеется небольшой зазор. Он сделан с помощью горизонтальной распорки (strut):
xPanel.add(horizontalStrut);
Между кнопками «Dos» и «Tres» имеется большой зазор. Он сделан с помощью невидимого компонента, который расширяясь по горизонтали «расталкивает» элементы к краям панели:
xPanel.add(horizontalGlue);
такой заполнитель сработает, если для компонента указан максимальный размер, вот почему я ввел строку:
попробуйте закомментировать эту строку и посмотрите на результат, horizontalGlue перестанет работать.
В вертикальной панели yPanel сделано всё аналогично, только вместо «horizontal» указано «vertical».
Ширина вертикальной панели yPanel определяется размером самого широкого элемента, здесь это надпись «Vertical Panel Y_AXIS».
Отступ слева от вертикальых кнопок определен в данном примере первым параметром в кострукторе Dimension в строке:
Ещё один момент. В примере закомментированы строки:
//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» меняет расположение компонента по отношению к другим компонентам.
Получаем:
такой результат.