1 Графика в Java Краткое введение в GUI (Graphical User Interface)
2 Базовые классы GUI всегда собирается из готовых строительных блоков, хранящихся в библиотеках. В Java их называют общим термином компонент (component), поскольку все они являются подклассами java.awt.Component. В Java 1.0 и 1.1 стандартной библиотекой GUI был Abstract Windowing Toolkit (AWT). На большинстве платформ компоненты awt реализованы с использованием систем GUI самой ОС.
3 Базовые классы Component - абстрактный класс, является базовым для всех компонент awt и описывает их основные свойства. Примером компонента являются кнопки в интерфейсе, меню, списки выбора, переключатели и т.д. Любой визуальный компонент в awt имеет прямоугольную форму, может быть отражен на экране и может взаимодействовать с пользователями. Container - наследник Component. Основная задача – группировать другие компоненты с помощью менеджера компоновки.
4 Класс Component Положение описывается 2 целыми числами класса Point. Методы: setLocaton(Point p) – установка положения, getLocation() – получение позиции (либо getX(), getY()). Размер. Класс Dimension с полями width и height описывает размеры компонента. Методы: setSize(Dimension d) – установка размера, getSize() или getWidth и getHeight() – получение размера компонента setBounds(Rectangle r) – установка границы getBounds() – получение размеров границы
5 Класс Component Видимость. Методы: setVisible(boolean b) – управление видимостью isVisible() – текущее состояние. Доступность. Методы: setEnabled(boolean b) – управление доступностью isEnabled() – текущее состояние Цвета. Класс Color(r,g,b) задает цвет в RGB от 0 до 255. Пример, Color c=new Color(100,20,50); Существуют спец. константы, задающие цвет – Color.blue. Для работы с foreground и background существуют методы: setForeground, getForeground, setBackground, getBackground.
6 Класс контейнер Основная задача – хранение и группировка компонентов. Для добавления компонента в контейнер метод add(), для удаления – remove(). getComponent(int n) - возвращает компонент с номером n. getComponents() - возвращает массив компонентов getComponentCount() – количество компонент getComponentAt(int x, int y) – возвращает компонент, который включает в себя указанную точку findComponentAt(int x, int y) – возвращает видимый компонент, который включает в себя указанную точку
7 Рисование компонента Ключевым классом при выполнении всех графических операций является Graphics. Назначение класса: определяет поверхность рисования; определяет методы рисования; определяет атрибуты для методов рисования.
8 Методы класса Graphics drawLine(x1,y1,x2,y2) – отрезок через (x1,y1) и (x2,y2) толщиной 1 пиксель. Другая толщина и стиль пера – не поддерживаются. drawRect(int x,int y, int width, int height) – прямоугольник, чей верхний левый угол в (x,y), а ширина и высота соответственно равняются width и height. fillRect(int x,int y, int width, int height) – закрашенный прямоугольник drawOval(int x,int y, int width, int height) – овал, вписанный в прямоугольник, задаваемый параметрами fillOval(int x,int y, int width, int height) – закрашивает овал
9 Методы класса Graphics drawArc (int x,int y, int width, int height, int startAngle, int arcAngle) - дуга, начинающаяся в startAngle и имеющая угловой размер arcAngle drawString(String text, int x, int y) – текст на экран drawPolygon(int[], int[], int) – многоугольник из массивов вершин Цвет задается с помощь setColor(Color c)
10 Апплеты
11 Апплеты Апплеты (applets) - это маленькие приложения, которые размещаются на серверах Internet, транспортируются клиенту по сети, автоматически устанавливаются и запускаются на месте, как часть документа HTML. Когда апплет прибывает к клиенту, его доступ к ресурсам ограничен. import java.awt.*; import java.applet.*; public class HelloApplet extends Applet{ public void paint(Graphics g){ g.drawString(Hello World!,20,20);} }
12 Запуск апплета 1. В код html-страницы встроить тэг с указанием класса и параметров апплета. Минимальный набор параметров приведен ниже: Для того, чтобы апплет исполнился, браузер должен поддерживать Java. 1. При создании кода апплета проверка его работоспособности осуществляется с помощью утилиты appletviewer. Для этого в некоторый текстовый файл помещают тэг с параметрами и вызывают команду appletviewer имя_файла_с_тэгом.
13 Порядок инициализации апплета Метод init() вызывается первым. В нем вы должны инициализировать свои переменные. Метод start() вызывается сразу же после метода init(). Он также используется в качестве стартовой точки для возобновления работы после того, как апплет был остановлен. В то время, как метод init() вызывается только однажды, start() вызывается каждый раз при выводе HTML- документа, содержащего апплет, на экран. Метод paint(Graphics g) вызывается каждый раз при повреждении апплета. AWT следит за состоянием окон в системе и замечает такие случаи, как, например, перекрытие окна апплета другим окном. В таких случаях, после того, как апплет снова оказывается видимым, для восстановления его изображения вызывается метод paint(Graphics g).
14 Порядок инициализации апплета Используемый по умолчанию метод update(Graphics g) класса Applet сначала закрашивает апплет цветом фона по умолчанию, после чего вызывает метод paint(). В общем случае нужно выполнять операции рисования в методе update, а в методе paint, к которому будет обращаться AWT, просто вызвать update. Метод stop() вызывается в тот момент, когда браузер покидает HTML-документ,содержащий апплет. При вызове метода stop апплет еще работает. Вы должны использовать этот метод для приостановки тех подпроцессов, работа которых необязательна при невидимом апплете. После того, как пользователь снова обратится к этой странице, вы должны будете возобновить их работу в методе start. Метод destroy() вызывается тогда, когда среда (например, браузер Netscape) решает, что апплет нужно полностью удалить из памяти. В этом методе нужно освободить все ресурсы, которые использовал апплет.
15 Перерисовка апплета Для инициации update() предусмотрены несколько вариантов метода repaint, который в свою очередь вызывает метод update: repaint(); repaint(time); repaint(x, y, w, h); repaint(time, x, y, w, h);
16 Задание 1. Запустить апплет, рассмотренный в примере презентации, используя два метода запуска – через html- страницу и через appletviewer. 2. Модифицировать код программы bouncingcircle таким образом, чтобы вместо круга движение осуществлял экземпляр реализованного ранее класса ColorableRect.