1 Java 13. ЭЛЕМЕНТЫ КОМПОНОВКИ И УПРАВЛЕНИЯ
2 Элементы управления Компоненты библиотеки Swing не привязаны к конкретной платформе. Классы компонент доступны разработчикам в составе JDK и отдельного продукта JFC (Java Foundation Classes). JFC содержит пакет Swing и большое число компонентов JavaBeans, которые могут использоваться как для ручной, так и для визуальной разработки пользовательских интерфейсов. Каждая компонента имеет свойства (и соотв. методы для них) предпочтительный размер ( preferredSize ) минимальный размер ( minimumSize )
3 Менеджеры размещения Контролируют позиционирование компонентов, добавляемых в окна, и их упорядочение Для определения размеров компонент используются их preferredSize и minimumSize Классы менеджеров (реализуют интерфейс LayoutManager ) FlowLayout BorderLayout GridLayout CridBagLayout BoxLayout и др.
4 java.awt.FlowLayout Менеджер поточной компоновки. Без состояния example01 поточная компоновка по центру: FlowLayoutEx.java public class FlowLayoutEx extends JFrame { public FlowLayoutEx() { setLayout(new FlowLayout()); for (int i = 0; i < c.length / 3; i++) { add(new JButton(Кнопка + i)); add(new JLabel(Метка + i)); add(new JTextField(Текст + i)); }
5 java.awt.BorderLayout Позволяет разложить компоненты по границам контейнера и одну в центре. С состоянием Менеджер хранит внутри себя соответствие между компонентами и их положением example02: BorderLayoutEx.java content.add(createLabel("Top"), BorderLayout.NORTH) content.add(createLabel("Top"), BorderLayout.PAGE_START) Константы положения NORTH SOUTH WEST EAST PAGE_START PAGE_END LINE_START LINE_END CENTER абсолютныеотносительные
6 java.awt.GridLayout Разделяет форму на заданное количество рядов и колонок Без состояния Ориентация текста ( ComponentOrientation ) – учитывается при раскладке. Предпочтительные размеры компонент ( PreferredSize ) – не учитываются. example03: GridLayoutEx.java
7 java.awt.GridBagLayout Ограничения: положение в сетке - координаты верхнего левого угла количество занимаемых строк/столбцов заполняет ли компонента ячейку, в каком направлении куда прижимается – к какой-либо стороне, в угол, по центру пустое пространство вокруг компоненты распределение свободного пространства example04: GridBagLayoutEx.java Раскладывает компоненты в прямоугольной сетке С состоянием Каждой компоненте ставится в соответствие набор ограничений (класс GridBagConstraints) GridBagConstraintsGridBagConstraints(int gridx, int gridy, int gridwidth, int gridheight, double weightx, double weighty, int anchor, int fill, Insets insets, int ipadx, int ipady)Insets
8 java.awt.GridBagLayout weightx / weighty С1.weightx = A С2.weightx = B Ширина свободного пространства – W. С1 получит в свое пользование W * A / (A + B) пространства, С2 получит W * B / (A + B). в сумме они дают W ширина выделенного столбца = предпочтительная ширина компоненты + выделенное свободное пространство example04: GBLweightEx.java GridBagConstraints(int gridx, int gridy, int gridwidth, int gridheight, double weightx, double weighty, int anchor, int fill, Insets insets, int ipadx, int ipady)
9 java.awt.GridBagLayout gridx / gridy / gridwidth / gridheight gridx / gridy – координаты ячейки в сетке (левой верхней ячейки) gridwidth / gridheight – количество занимаемых ячеек по ширине / высоте content.add(lblImage, new GridBagConstraints(0, 0, 1, 2, 0, 0, GridBagConstraints.NORTH,GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0)); GridBagConstraints(int gridx, int gridy, int gridwidth, int gridheight, double weightx, double weighty, int anchor, int fill, Insets insets, int ipadx, int ipady)
10 java.awt.GridBagLayout anchor / fill Расположение компоненты в выделенной прямоугольной области: растянута по одной или обеим осям ( fill ) прижата к одной стороне или в угол ( anchor ) NORTH NORTHEAST EAST SOUTHEAST SOUTH SOUTHWEST WEST NORTHWEST PAGE_START FIRST_LINE_END LINE_END LAST_LINE_END PAGE_END LAST_LINE_START LINE_START FIRST_LINE_STAT BASELINE BASELINE_LEADING BASELINE_TRAILING ABOVE_BASELINE ABOVE_BASELINE_LEADING ABOVE_BASELINE_TRAILING BELOW_BASELINE BELOW_BASELINE_LEADING BELOW_BASELINE_TRAILING константы для anchor абсолютныеотносительныеновые (Java 6) CENTER example04: GBLanchorEx.java GridBagConstraints(int gridx, int gridy, int gridwidth, int gridheight, double weightx, double weighty, int anchor, int fill, Insets insets, int ipadx, int ipady)
11 java.awt.GridBagLayout insets и ipadx / ipady ipadx и ipady добавляются к размерам компоненты с каждой стороны insets описывает прозрачную рамку вокруг компоненты Основное, что надо сделать при использовании GridBagLayout : Расчертить сетку и определить положение компонент. За это отвечают gridx/gridy/gridwidth/gridheight. Определить, как распределять свободное пространство. Это weightx/weighty. Определить расположение компонент в предоставляемых им областях. Это параметры anchor и fill. Определить промежутки между компонентами и (если необходимо) "прибавки" к размерам – insets и ipadx/ipady. GridBagConstraints(int gridx, int gridy, int gridwidth, int gridheight, double weightx, double weighty, int anchor, int fill, Insets insets, int ipadx, int ipady)
12 javax.swing.BoxLayout Раскладывает компоненты в том порядке, в каком они были добавлены в контейнер, друг за дружкой, вплотную. public BoxLayout (Container target, int axis) target - контейнер, на объектах которого менеджер будет выполнять раскладку axis - ось, вдоль которой будет осуществляться раскладка X_AXIS Y_AXIS абсолютные константы для axis LINE_AXIS PAGE_AXIS относительные example05: BoxLayoutEx.java
13 Layout = null example06: NullLayoutEx.java
14 Ключевые моменты Компоненты имеют предпочтительный размер ( preferredSize ) и минимальный размер ( minimumSize ) Для размещения визуальных компонент внутри контейнера используются менеджеры раскладки ( LayoutManager ) Класс ComponentOrientation отвечает за ориентацию текста, зависящую от языка Возможно абсолютное позиционирование компонент в контейнере без использования менеджера раскладки