Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник 419.docx
Скачиваний:
17
Добавлен:
30.04.2022
Размер:
5.86 Mб
Скачать

5. Размещение элементов управления в окне

Цель работы: Получение практических навыков работы с менеджерами размещения компонентов.

5.1 Теоретическая справка

Напрямую в окне элементы управления не размещаются. Для этого служит панель содержимого, занимающая все пространство окна. Обратиться к этой панели можно методом getContentPane() класса JFrame. С помощью метода add(Component component) можно добавить на нее любой элемент управления.

В классе Container определено около двух десятков методов для управления набором компонентов, содержащихся в контейнере. Они похожи на методы класса-коллекции и являются коллекцией особого рода — визуальной. Кроме хранения элементов контейнер занимается их пространственным расположением и прорисовкой. У каждой панели есть, так называемый, менеджер размещения, который определяет стратегию взаимного расположения элементов, добавляемых на панель. Его можно изменить методом setLayout(LayoutManager manager).

Менеджер последовательного размещения FlowLayout размещает добавляемые на панель компоненты строго по очереди, строка за строкой, в зависимости от размеров панели. Как только очередной элемент не помещается в текущей строке, он переносится на следующую.

Рис. 18 – Наиболее распространенные менеджеры размещения

Менеджер размещения BorderLayout разделяет панель на пять областей: центральную, верхнюю, нижнюю, правую и левую (константы, определенные в классе BorderLayout: NORTH, SOUTH, EAST, WEST и CENTER). В каждую из этих областей можно добавить ровно по одному компоненту, причем компонент будет занимать всю отведенную для него область. Компоненты, добавленные в верхнюю и нижнюю области, будут растянуты по ширине, добавленные в правую и левую — по высоте, а компонент, добавленный в центр, будет растянут так, чтобы полностью заполнить оставшееся пространство панели.

При добавлении элемента на панель с менеджером размещения BorderLayout, необходимо дополнительно указывать в методе add(), какая из областей имеется в виду.

Менеджер табличного размещения GridLayout разбивает панель на ячейки одинаковой ширины и высоты (таким образом окно становится похожим на таблицу). Каждый элемент, добавляемый на панель с таким расположением, целиком занимает одну ячейку. Ячейки заполняются элементами по очереди, начиная с левой верхней. Этот менеджер, в отличие от рассмотренных ранее, создается конструктором с параметрами (четыре целых числа). Необходимо указать количество столбцов, строк и расстояние между ячейками по горизонтали и по вертикали. 

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

Элементы, добавленные на панель с блочным размещением, выстраиваются один за другим в строку или в столбец (определяется заданием X_AXIS и Y_AXIS. Расстояние между элементами по умолчанию нулевое.

Однако, вместо компонента можно добавить невидимую «распорку» (Strut), единственная задача которой — раздвигать соседние элементы, обеспечивая между ними заданное расстояние. Кроме того, на такую панель можно добавить еще один специальный элемент — своеобразную «пружину» (Glue). Если размер панели будет больше, чем необходимо для оптимального размещения всех элементов, те из них, которые способны растягиваться, будут стараться заполнить дополнительное пространство собой. Если же разместить среди элементов одну или несколько «пружин» (Glue), дополнительное свободное пространство будет распределяться и в эти промежутки между элементами. 

Принцип работы менеджера GridBagLayout прост: контейнер разбивается на сетку, и над каждой ячейкой сетки организуется свой контроль. Компоненты могут занимать любое количество ячеек сетки, ячейки могут оставаться пустыми и т.п. GridBagLayout располагает компоненты на форме с помощью следующих полей.

поле

описание

gridx, gridy

номер столбца и номер строки для ячейки, в которую будет помещен компонент (верхняя левая ячейка =0,0)

gridwidth, gridheight

определяют количество ячеек, занимаемых добавляемым компонентом (две смежные ячейки в одной строке gridwidth=2 и gridheight =1)

fill

распределение компонента по ячейкам (NONE – компонент не изменяет своих размеров, BOTH – изменяется высота и ширина, так чтобы компонент занимал все отведенное для него пространство, HORIZONTAL – компонент растягивается по горизонтали, VERTICAL – по вертикали)

anchor

выравнивание компонента внутри отведенного для него пространства

weightx, weighty

изменение размеров компонента (чтобы размеры компонента изменялись по горизонтали или вертикали значения должны лежать от 0.0 до 1.0

ipadx, ipady

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

insets

отступы компонента от краев выделенной ему области (сверху, слева, снизу, справа)

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]