Диспетчер компоновки BorderLayout Java

Диспетчер компоновки BorderLayout JavaДиспетчер компоновки BorderLayout по умолчанию устанавливается для панели содержимого, присутствующей в объекте JFrame. В отличие от диспетчера FlowLayout, который полностью контролирует позицию каждого компонента, диспетчер BorderLayout позволяет вам выбрать место для каждого компонента.

Компонент можно разместить в центре панели, в ее верхней или нижней части, а также слева или справа.

Например:

При размещении компонентов сначала выделяется место по краям контейнера, а оставшееся свободным пространство считается центральной областью. При изменении размера контейнера компонентов, расположенных по краям, остается постоянной, изменяется лишь размер центральной области.При добавлении компонента к панели указываются константы CENTER(центральный), NORTH(северная), SOUTH(южная), EATH(восточная) или WEST(западная), определенные в классе BorderLayout. Занимать все позиции в панели не обязательно. Если не указано никакого значения, по умолчанию принимается CENTER.

Диспетчер компоновки BorderLayout JavaКонстанты в классе BorderLayout определены как строки. Например, константа BorderLayout.SOUTH — это строка «South». Многие программисты предпочитают использовать непосредственно строки, поскольку они короче, например contentPane.add(component, «South»). Однако если вы случайно сделаете в строке опечатку, компилятор не распознает этой ошибки.

В отличие от FlowLayout, диспетчер компоновки BorderLayout растягивает все компоненты, так чтобы они заполняли все свободные пространство. (Как вы помните, диспетчер FlowLayout оставляет размеры компонента неизменными). Это может привести к проблеме при добавлении кнопки:

На рис.2 показано, что произойдет, если мы попробуем применить фрагмент кода, приведенный выше. Размеры кнопки увеличатся, и она заполнит собой всю нижнюю часть фрейма. Если мы попытаемся вставить в нижнюю часть еще одну кнопку, она заменит собой предыдущую кнопку.

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

Чтобы достичь такой конфигурации, сначала создается новый объект JPanel, к которому затем добавляются отдельные кнопки. Как вы уже знаете, по умолчанию с обычной панелью связывается диспетчер компоновки FlowLayout. В данной ситуации он вполне подходит. В панель с помощью метода add() помещается отдельные кнопки(эту процедуру мы уже рассматривали ранее).

Диспетчер компоновки BorderLayout Java

Рис.1. Одиночная кнопка, управляемая диспетчером компоновки BorderLayout.

Диспетчер компоновки BorderLayout JavaРис.2. Панель, размещенная в нижней части фрейма

Поскольку мы не переопределяли диспетчер компоновки, то положением кнопок управляет FlowLayout. Это значит, что кнопки будут выровнены по центру панели и масштаб их будет увеличен для заполнения всего свободного пространства.

Следующий фрагмент кода добавляет в нижнюю часть контейнера панель, содержащую три кнопки:

BorderLayout расширяет размер панели с тремя кнопками, чтобы она заняла всю нижнюю область.