
- •JAVA-ТЕХНОЛОГИЯ
- •Базовый инструментарий работы с GUI –
- •Схема иерархии классов AWT (фрагмент)
- •Иерархия классов AWT: класс Component
- •Иерархия классов AWT: класс Container
- •Размещение подкомпонент в контейнере AWT
- •AWT: пример (слайд 1 / 6 )
- •AWT: пример (слайд 2 / 6 )
- •AWT: пример (слайд 3 / 6 )
- •AWT: пример (слайд 4 / 6 )
- •AWT: пример (слайд 5 / 6 )
- •AWT: пример (слайд 6 / 6 )
- •Пояснения к примеру на AWT (слайд 1)
- •Пояснения к примеру на AWT (слайды 2 - 5)
- •Пояснения к примеру на AWT (слайды 2 – 6)
- •Некоторые элементы управления (controls) AWT
- •Элементы управления AWT (продолжение)
- •Обзор подпакетов java.awt

JAVA-ТЕХНОЛОГИЯ
Сафонов Владимир Олегович
Профессор кафедры информатики, руководитель лаборатории Java- технологии (http://polyhimnie.math.spbu.ru/jtl)
Email: vosafonov@gmail.com
Лекция 10

Базовый инструментарий работы с GUI –
AWT (Abstract Window Toolkit)
Работа с окнами и другими визуальными элементами управления (кнопками, списками, линейками прокрутки и др.)
Управление шрифтами, цветами и размещением компонент
Двумерная растровая графика (Graphics, Graphics2D)
Создание и обработка событий
В отличие от многих других инструментов поддержки GUI, не требует жесткой привязки компонент к экранным координатам; обеспечивает несколько способов их компоновки с помощью менеджеров размещения (layout managers)
Определяет иерархию классов визуальных компонент (около
100)и интерфейсов для управления ими
Содержит классы для передачи данных (data transfer) с использованием визуальной парадигмы cut-and-paste через платформно-зависимый буфер (clipboard)
(C)В.О. Сафонов. 2013

Схема иерархии классов AWT (фрагмент)
Component
Container
Window |
|
Panel |
|
|
|
Frame |
java.applet.Applet |
|
(C) В.О. Сафонов. 2013

Иерархия классов AWT: класс Component
Component – абстрактный базовый класс. Основные методы:
-визуализация / упрятывание компоненты:
c.setVisible(true); // показать; метод c.show() – deprecated! c.setVisible(false); // спрятать; метод c.hide() - deprecated! c.isVisible() – узнать, видна ли компонента
-основной цвет и цвет фона:
c.setForeground(Color.lightGray); // установка основного цвета
c.setBackground(Color.black); |
// установка цвета фона |
- размеры компоненты: |
|
c.setSize(width, height); // установка размеров
Dimension s = c.getSize(); int x = s.getWidth(); int y = getHeight();
-шрифт для изображения текстов: c.setFont(new Font(“SansSerif”, Font.ITALIC, 12));
здесь “SansSerif” – имя гарнитуры, ITALIC – курсив, 12 – размер; размер указан в пунктах (points) : 1 пункт = 1/72 дюйма
-c.addNotify() - связь самой внешней компоненты с экранным native- ресурсом, предоставляемым целевой платформой (создание native peer).
По документации JDK, его явный вызов не требуется. Тестирование: для JDK 1.5 (Windows XP) - не требуется,
для JDK 1.3 (Solaris) – требуется
(C) В.О. Сафонов. 2013

Иерархия классов AWT: класс Container
Container – класс, определяющий свойства визуальной компоненты (объекта) как контейнера других объектов.
В AWT две разновидности контейнеров:
-окно (Window) – область, размеры и положение которой можно изменять с помощью мыши, содержащая либо фрейм (Frame) – окно верхнего уровня с заголовком, либо диалог (Dialog) – окно, предназначенное для диалога с пользователем
-панель (Panel) – область экрана, предоставляемая Java-программе (например, апплету) другим приложением (браузером, визуализатором апплетов и др.), в которой Java-программа может размещать свои визуальные компоненты. Applet – потомок Panel
Основные методы:
c.add(subComponent); - добавление подкомпоненты и ее размещение
менеджером размещения (LayoutManager) по умолчанию.
Для окон и фреймов может давать неожиданные результаты (сливающиеся кнопки и т.п.).
Для панелей и апплетов – более безопасно. В общем случае:
|
(C) В.О. Сафонов. 2013 |
c.add(subComponent, clarification); // добавление компоненты |
|
c.remove(subComponent); |
// удаление компоненты |

Размещение подкомпонент в контейнере AWT
Определяется менеджером размещения (LayoutManager)
Возможные типы размещения:
- BorderLayout (умолчание для Window и Frame) – слева (WEST), справа (EAST), вверху (NORTH), внизу (SOUTH) и в центре (CENTER). По умолчанию – CENTER.
Пример размещения подкомпоненты:
c.add(subComponent, BorderLayout.WEST); // слева
- FlowLayout – слева направо, как текст в абзаце (умолчание для Panel и Applet) : LEFT – выравнивание по левому краю, RIGHT – по правому, CENTER – с центровкой; LEADING, TRAILING – в соответствии с ориентацией компоненты- родителя. По умолчанию - CENTER
Пример размещения компоненты фрейма по умолчанию: aFrame.add(SubComponent); // с центровкой
- Другие типы размещения:
GridLayout – как прямоугольная решетка
BoxLayout – “в коробке”, вертикально или горизонтально
CardLayout – как колода карт (только одна “карта” видна в |
|
каждый момент) |
(C) В.О. Сафонов. 2013 |
|

AWT: пример (слайд 1 / 6 )
import java.awt.*; import java.awt.event.*; public class FrameUser {
public static void main (String[] args)
{
Frame f = new Frame("My frame"); f.setSize(200, 200);
f.addNotify(); // для нотификации о закрытии
// native-окна (JDK 1.3, Solaris 8) f.addWindowListener(
new WindowAdapter() {
public void windowClosing(WindowEvent w) { System.exit(0); }
} );

AWT: пример (слайд 2 / 6 )
Button b1 = new Button("Yes"); // кнопка b1.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e)
{
((Button) e.getSource())
.getParent()
.setBackground(Color.green);
}});
//обработка события нажатия кнопки “Yes”:
//вся картинка окрашивается в зеленый цвет
(C)В.О. Сафонов. 2013

AWT: пример (слайд 3 / 6 )
Button b2 = new Button("No"); // кнопка b2.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e)
{
((Button) e.getSource())
.getParent()
.setBackground(Color.red);
}});
//обработка события нажатия кнопки “No” –
//вся картинка окрашивается в красный цвет
(C)В.О. Сафонов. 2013

AWT: пример (слайд 4 / 6 )
Button b3 = new Button("Cancel"); // кнопка “Cancel” b3.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}});
//обработка события нажатия кнопки “Cancel” –
//выход из приложения
(C)В.О. Сафонов. 2013