Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
java3.doc
Скачиваний:
15
Добавлен:
05.06.2015
Размер:
165.38 Кб
Скачать

Лабораторная работа №3.

Программирование графики.

Цель работы: научиться использовать библиотеку Java 2D для отображения графики.

Продолжительность работы: 4 часа.

Теоретические сведения

Графический пакет будет сложен в использовании, если он не умеет чертить примитивы.

Базовыми графическими операциями являются: умение ставить определённого цвета точку, умение чертить отрезок по двум точкам, умение собрать из отрезков многоугольник, параметры которого заданы.

При создании компонента, т. е. объекта класса Component, автоматически формируется его графический контекст(graphics context). В контексте размещается область рисования и вывода текста и изображений. Контекст содержит текущий и альтернативный цвет рисования и цвет фона — объекты класса color, текущий шрифт для вывода текста — объект класса Font.

В контексте определена система координат, начало которой с координатами (0, 0) расположено в верхнем левом углу области рисования, ось Ох направлена вправо, ось Оу — вниз. Точки координат находятся между пикселами.

Управляет контекстом класс Graphics или новый класс Graphics2D, введенный в Java 2. Поскольку графический контекст сильно зависит от конкретной графической платформы, эти классы сделаны абстрактными. Поэтому нельзя непосредственно создать экземпляры класса Graphics или Graphics2D.

Однако, каждая виртуальная машина Java реализует методы этих классов, создает их экземпляры для компонента и предоставляет объект класса Graphics методом getGraphics () класса Component или как аргумент методов paint()иupdate().

При создании контекста в классе Graphics задается текущий цвет для рисования, обычно черный, и цвет фона области рисования — белый или серый. Изменить текущий цвет можно методом setcolor (Color newColor), аргумент newcolor которого — объект класса Color.

Узнать текущий цвет можно методом getcolor (), возвращающим объект класса color.

Цветв Java — объект класса color. Основу класса составляют 7 конструкторов цвета. Самый простой конструктор:

Color(int red, int green, int blue)

создает цвет, получающийся, как смесь составляющих модели RGB. Каждая составляющая меняется от 0 (отсутствие составляющей) до 255 (полная интенсивность этой составляющей). Например:

Color pureGreen = new Color(0, 255, 0);

определяют чистый ярко-зеленый pureGreen цвет.

В другом конструкторе интенсивность составляющих можно изменять более гладко вещественными числами от 0.0 (отсутствие составляющей) до 1.0 (полная интенсивность составляющей):

Color(float red, float green, float blue) 

Например:

Color someColor = new Color(O.OSf, 0.4f, 0.95f);

Также можно конструктором Color(int rgb) задать все три составляющие в одном целом числе. В битах 16—23 записывается красная составляющая, в битах 8—15 — зеленая, а в битах 0—7 — синяя составляющая цвета. Например:

Color с = new Color(OXFF8F48FF);

Здесь красная составляющая задана с интенсивностью 0x8F, зеленая — 0x48, синяя — 0xFF.

Конструкторы

Color(int red, int green, int blue, int alpha)

Color(float red, float green, float blue, float alpha)

Color(int rgb, boolean hasAlpha)

вводят четвертую составляющую цвета, так называемую "альфу", определяющую прозрачность цвета. Эта составляющая проявляет себя при наложении одного цвета на другой. Если альфа равна 255 или 1,0, то цвет непрозрачен. Если альфа равна 0 или 0,0, то цвет абсолютно прозрачен, для каждого пиксела виден только предыдущий цвет.

Если нет необходимости тщательно подбирать цвета, то можно просто воспользоваться одной из тринадцати статических констант типа color, имеющихся в классе color. Вопреки соглашению "Code Conventions" они записываются строчными буквами: black, blue, cyan, darkGray, gray, green, lightGray, magenta, orange, pink, red, white, yellow.

Методы класса Color позволяют получить составляющие текущего цвета: getRed(), getGreen(), getBlue(), getAlphaO, getRGBO, getColorSpace (), getComponents ().

Два метода создают более яркий brighter и более темный darker цвета по сравнению с текущим цветом. Создав цвет, можно рисовать им в графическом контексте.

Основной метод рисования drawLine(int xl, int yl, int х2, int y2) вычерчивает текущим цветом отрезок прямой между точками с координатами (xl, yl) и (х2, у2). Такого метода достаточно, чтобы нарисовать любую картину по точкам, рисуя каждую точку с координатами (х, у) методом drawLine (x, у, х, у) и меняя цвета от точки к точке.

Но разумеется, гораздо благоразумнее воспользоваться примитивами. Будем использовать прямоугольник(Rectangle2D) иэллипс(Ellipse2D):

Rectangle2D rect = new Rectangle2D.Double(150,200, 100, 70);

g2.draw(rect);

Ломаные линиипредназначены для задания ломаных фигур или многоугольников. Для задания ломаной линии служит классGeneralPath. Чтобы добавить сегмент, используют методlineTo, чтобы установить начальную точку рисования – методmoveTo. Чтобы «закрыть» кривую и получить многоугольник, необходимо вызвать методclosePath.

Пример.

GeneralPath path = new GeneralPath();

path.moveTo(0, 20);

path.lineTo(20, 20);

path.lineTo(10, 0);

path.closePath();

g2.setPaint(Color.RED);

g2.fill(path);

Текст в Java 2D обладает собственным контекстом — объектом класса FontRenderContext, хранящим всю информацию, необходимую для вывода текста. Получить его можно методом getFontRendercontext () класса Graphics2D.

Чтобы вывести текст, сначала необходимо создатьшрифт. Объекты класса Font хранят начертания символов, образующие шрифт, которые задаются двумя конструкторами:

  • Font (Map attributes) — задает шрифт с заданными аргументом attributes атрибутами. Ключи атрибутов и некоторые их значения задаются константами класса TextAttribute из пакета java.awt.font. Характерен для Java 2D.

  • Font (String name, int style, int size) — задает Шрифт ПО имени name, со стилем style и размером size типографских пунктов. Характерен для JDK 1.1, но широко используется и в Java 2D в силу своей простоты.

Стильшрифта style — это одна из констант класса Font:

BOLD — полужирный; 

ITALIC — курсив;

PLAIN — обычный.

Полужирный курсив (bolditalic) можно задать операцией побитового сложения, Font. BOLD | Font. ITALIC.

Пункт, по которому определяется размершрифтаsize, равен 1/72 части английского дюйма, 0,351 мм и применяется в компьютерной графике.

В Java принято пять логических шрифтов:

- SansSerif

- Serif

- Monospaced

- Dialog

- DialogInput

После создания шрифта с нужными атрибутами можно вывести напечатанный шрифтом текст на экран.

Пример.

class FontsPanel extends JPanel

{

@Override

protected void paintComponent(Graphics g)

{

super.paintComponent(g);

Graphics2D g2 = (Graphics2D) g;

Font helvb14 = new Font("Arial", Font.BOLD, 22);

g2.setFont(helvb14);

String message = "Text test";

g2.drawString(message, 200, 150);

}

}

Рисунки иногда бывает полезно расположить в центре экрана. Для этого сам фрейм помещается по центру:

setLocation(screenSize.width / 4, screenSize.height / 4);

Задать размер фрейма можно методом setsize:

setSize(screenSize.width / 2, screenSize.height / 2);

В случае, когда необходимо учесть масштабирование рисунка в зависимости от размера экрана, используют метод получения данных о границах фрейма.

Пример. Создаем прямоугольник, совпадающий по размеру с самим фреймом и, соответственно, полностью заполняющий его.

protected void paintComponent(Graphics g)

{

super.paintComponent(g);

Graphics2D g2 = (Graphics2D) g;

// получаем границы

Rectangle2D bounds = g2.getClipRect();

// создаем прямоугольник с параметрами, привязанными к ширине и высоте фрейма

Rectangle2D rect_ = new Rectangle2D.Double(0, 0, bounds.getWidth(), bounds.getHeight() );

}

Для «раскрашивания» рисунка, т.е. его заливки цветом, используется метод setPaint() (класс Graphics2D), в качестве параметра которому передается объект Color. Для отображения закрашенного примитива используется метод fill() класса Graphics2D.

Пример. Чтобы сделать фрейм из предыдущего примера белым, раскрасим прямоугольник.

g2.setPaint(Color.WHITE);

g2.fill(rect_);

Вообще, для отображения графической информации необходимо определить класс, унаследованный от класса JPanel. При создании рисунков в Java не забываем подключать пакеты (как мы бы инициализировали пространство имен, будь это не Java, а СИ). Основные используемые пакеты:

import java.awt.Color;

import java.awt.Dimension;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.Toolkit;

import java.awt.geom.Rectangle2D; (или любая другая фигура)

import javax.swing.JFrame;

import javax.swing.JPanel;

import java.awt.Font;

Для представления значения абстрактных типов данных, таких как цвета, идеальны неизменяемые классы. И java.awt.Color – классический пример неизменяемости в библиотеке классов Java. Поскольку цвета, как было замечено выше, обычно представляются в виде упорядоченного набора числовых значений в некоторых способах цветового представления (RGB, HSB, CMYK), кажется более разумным рассматривать цвет как выделенное значение в пространстве цветов, а не как упорядоченный набор индивидуально адресуемых значений, поэтому Color реализован как неизменяемый класс.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]