Учебная страница курса биоинформатики,
год поступления 2010
Графический пользовательский интерфейс (GUI). Менеджеры компоновки.
Для того, чтобы управлять тем, как располагаются элементы в графических окнах приложения, удобно использовать автоматические укладчики. Каждый укладчик руководствуется своими правилами. Структура графических объектов в Java такова, что одни компоненты (элементарные) укладываются на другие компоненты (контейнеры). В качестве стандартного контейнера обычно используют компонент JPanel. Укладчик (расширяющий интерфейс LayoutManager), установленный в контейнере, отвечает за пересчет координат и размеров лежащих на нем компонентов (в том числе и контейнерных). Это может происходить при начальной отрисовке, при изменении размеров контейнера, при добавлении, удалении или изменении размеров компонентов. Укладчик устанавливается в контейнере командой p.setLayout(…). Рассмотрим стандартные укладчики. BorderLayout укладывает максимально 5 компонентов, 4 по направлениям на стороны границы и 5-й – посередине. Эта укладка по умолчанию используется во внешней панели (ContentPane) в графических окнах. Для того, чтобы указать укладчику, куда именно нужно положить тот или иной компонент, используют команду p.add(JComponent c,Object place).
1 public class MyFrame extends JFrame {
2 public MyFrame() {
3 Container p = this.getContentPane();
4 //p.setLayout(new BorderLayout());
5 p.add(new Jbutton("CENTER"),BorderLayout.CENTER);//!!!Обязательно должен быть заполнен центр
6 p.add(new JButton("UP"),BorderLayout.NORTH);
7 p.add(new JButton("DOWN"),BorderLayout.SOUTH);
8 this.setSize(400,300);
9 this.setVisible(true);
10 }
11 public static void main(String[] args) {
12 new MyFrame();
13 }
14 }
Укладчик FlowLayout укладывает компоненты друг за другом слева направо.
Другие укладчики:
GridLayout укладывает компоненты как в прямоугольную сетку, как в пятнашках. BoxLayout укладывает компоненты в столбик
Пользователь может влиять на управление размерами компонентов, задавая минимальный, предпочтительный и максимальный размеры каждого компонента. Это делается командой b.setPreferredSize(Dim). Есть еще b.setMinimumSize(Dimension) и b.setMaximumSize(Dim), но они больше имеют отношение к динамическим элементам типа передвигаемого разделителя.
Пример Две кнопки, одна висит наверху, другая на 50 точек ниже.
1 JPanel p = new JPanel();
2 this.getContentPane().add(p,BorderLayout.NORTH);
3 p.setLayout(new BorderLayout());
4 p.add(new JPanel(),BorderLayout.Center);
5 JButton b = null;
6 b = new JButton("UP");
7 p.add(b,BorderLayout.NORTH);
8 b.setPreferredSize(new Dimension(10,50));
9 b = new JButton("DOWN");
10 p.add(b,BorderLayout.SOUTH);
11 b.setPreferredSize(new Dimension(10,50));
12 p.setPreferredSize(new Dimension(10,150));
Еще один известный укладчик – это null, т.е. укладчика нет. При этом добавление компонентов должно сопровождаться командой задания положения c.setBounds(). Вместо контейнера JPanel можно использовать свое расширение абстрактного родителя всех компонентов, JComponent. Однако нужно помнить, что у последнего укладчиком по-умолчанию является null.
Границы панелей.
Панели можно обрамлять границами различной структуры. Это делается командой p.setBorder(Border). Пустая граница некоторой толщины создается как
1 Border b = new EmptyBorder(int top, int left, int bottom, int right).
Напоминание про стандартные компоненты: Текстовое поле - JTextField. Надпись – JLabel. Кнопка – JButton. Текстовая область – JTextArea.