n Кроссплатформенное графическое приложение?..
n Abstract Window Toolkit (AWT)
l Компоненты являются
компонентами ОС
l Большое количество native-кода
l Отображение изменяется
при смене ОС
l Класс java . awt .Component
определяет базовую
функциональность компонентов
Иерархия классов AWT
Проблемы AWT
n Сходные элементы в различных ОС могут иметь некоторые различия
n ОС часто имеют элементы GUI, отсутствующие в других ОС
n Использование native-методов в AWT приводит к возникновению ошибок на конкретных платформах
Технология Swing
n Элементы GUI отрисовываются в пустых окнах
n «Нативные» функции используются только для вывода окна, отрисовки и получения информации о действиях пользователя
n Набор элементов GUI более широк, чем в AWT, и может быть еще расширен
n Сильная привязка к «нативным» методам отсутствует, что снижает вероятность возникновения ошибок
n Отображение на различных платформах единообразно
Иерархия классов
Иерархия классов Пакет javax . swing
Вопрос 74 Отрисовка графических компонентов. Двойная буфферизация. Pluggable look and feel. 8-17 Лекция Основы создания графических приложений.
Отрисовка компонентов
n Отрисовка производится в методе paintComponent ()
n Запрос на перерисовку
l public void repaint()
l public void repaint(long tm)
l public void repaint(int x, int y, int width, int height)
l public void repaint(long tm, int x, int y,
int width, int height)
class NotHelloWorldPanel extends JPanel {
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawString("Not a Hello, World program", MESSAGE_X, MESSAGE_Y);
}
public static final int MESSAGE_X = 75;
public static final int MESSAGE_Y = 100;
}
Работа с графикой
n java.awt.Graphics
l Базовый класс, предназначенный для рисования в контекстах компонентов, в изображениях в памяти и т.д.
l Предлагает простые средства рисования:
void drawArc(int x, int y, int width, int height,
int startAngle, int arcAngle)
void drawString(String str, int x, int y)
и т.д.
n java.awt.Graphics2D
l Класс-наследник класса java . awt . Graphics, обеспечивающий большую функциональность
l работа с 2D-сценой
l java . awt . geom .*
Содержит набор классов работы с графическими примитивами
Работа с цветом
n Класс java.awt.Color
n Константы Color.BLUE, Color.RED, …
n Покомпонентные конструкторы Color(float r, float g, float b, float a)
Color(ColorSpace cspace, float[] components, float alpha)
n Методы получения параметров цвета getRed (), getTransparency (), …
Работа со шрифтами
n Класс java.awt.Font
l Константы
l Конструкторы
Font(String name, int style, int size)
l Методы модификации и получения параметров шрифта
l Класс java.awt.FontMetrics
l Содержит методы определения геометрических характеристик шрифтов
Двойная буферизация
n В целях экономии времени на перерисовку логично запоминать однажды нарисованный статичный объект как рисунок в памяти
n При использовании Swing для этого не надо предпринимать дополнительных действий по выделению памяти и.д.
n Используется т.н. механизм «двойной буферизации», реализующий сохранение информации на уровне механизмов отрисовки
n Для одного участка «видимой области» приложения используется не более одного изображения-буфера
Двойная буферизация
Методы класса JComponent
n setDoubleBuffered( boolean aFlag )
Устанавливает, буферизует ли объект свой вывод
n boolean isDoubleBuffered()
Возвращает булевское значение, показывающее, используется ли двойная буферизация, или нет
Pluggable Look And Feel
n Программе можно придать различный вид, изменив «стиль» отрисовки компонентов
l Внешний вид программы может изменяться во время исполнения
l Перерисовка должна вызываться принудительно
n Есть разработанные «стили» для базовых платформ
n Существует возможность создания собственных «стилей»
String s;
switch (value) {
case 0: s = "javax.swing.plaf.metal.MetalLookAndFeel";
break;
case 1: s = "com.sun.java.swing.plaf.motif.MotifLookAndFeel";
break;
case 2: s = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
break;
default: s = UIManager.getSystemLookAndFeelClassName();
}
UIManager.setLookAndFeel(s);
SwingUtilities.updateComponentTreeUI(getContentPane());
Вопрос 75 Оконные приложения, меню. Менеджеры компоновки. 18-21 Лекция Основы создания графических приложений.
Оконные приложения в Swing
n Используется класс javax . swing . JFrame
n Содержимое окна находится на панели, ссылку на которую можно получить вызовом метода getContentPane ()
n Параметрами окна можно управлять
Пример оконного приложения
import java.awt.*;
import javax.swing.*;
public class CenteredFrameTest {
public static void main(String[] args) {
CenteredFrame frame = new CenteredFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
class CenteredFrame extends JFrame {
public CenteredFrame() {
Toolkit kit = Toolkit.getDefaultToolkit();
Dimension screenSize = kit.getScreenSize();
int screenHeight = screenSize.height;
int screenWidth = screenSize.width;
setSize(screenWidth / 2, screenHeight / 2);
setLocation(screenWidth / 4, screenHeight / 4);
Image img = kit.getImage("icon.gif");
setIconImage(img); setTitle("CenteredFrame");
}
}
Работа с меню
n javax . swing . JMenuBar
Панель меню в верхней части окна
n javax . swing . JMenu
Меню как таковое
n javax . swing . JMenuItem
Единичный элемент меню
n javax . swing .JCheckBoxMenuItem
Элемент меню «флажок»
n javax . swing .JRadioButtonMenuItem
Элемент меню «радио-кнопка»
n javax.swing.JPopup
Всплывающее меню
Менеджеры компоновки
n Управляют размещением компонентов в контейнере, учитывая параметры этих компонентов (например, предпочтительный размер)
n Реализуют интерфейс java.awt.LayoutManager
n Устанавливаются с помощью метода setLayout () контейнера
n Примеры простых компоновок:
l Простая поточная компоновка FlowLayout
l Граничная компоновка BorderLayout
l Компоновка в сетку GridLayout
l Компоновка «Колода карт» CardLayout
l Сетка с настраиваемыми размерами GridBagLayout
Вопрос 76 Обработка событий, общие принципы. Участники и правила именования (с примерами). Классы-адаптеры. 22-24, 31-34 Лекция Основы создания графических приложений.
Обработка событий
n Событие
l Классы событий в пакетах
n java.awt.event
n javax.swing.event
n Источник
l public void addTypeListener (TypeListener el) throws java.util.TooManyListenersException
l public void removeTypeListener(TypeListener el)
n Слушатель
l Должен реализовывать методы для приема и обработки уведомлений
l Существует набор интерфейсов TypeListener, описывающих методы обработки событий
l Класс слушателя должен реализовывать интерфейс, соответствующий событию
Дата: 2019-07-30, просмотров: 315.