Чтение онлайн

на главную - закладки

Жанры

Шрифт:
Графическая модель

Класс Graphics определяет возможности низкоуровневого графического рисования. Если вы уже разрабатывали программы на AWT или Swing, этот класс покажется вам очень знакомым. В действительности его свойства и программный интерфейс практически идентичны, хотя и являются подмножеством свойств класса Graphics J2SE.

Класс Graphics определяет модель, которая позволяет приложениям рисовать- или раскрашивать на языке Java — базовые двухмерные фигуры на Canvas. Описанным методом public void paint(Graphics g) осуществляется рисование в вашем подклассе Canvas, подменяя объявленный метод protected abstract в Canvas. Класс Canvas имеет пустое paint(Graphics g) определение, что объясняет, почему он не создает какого-либо визуального представления.

Каждый конкретный подкласс Canvas имеет доступ к объекту Graphics. Этот объект Graphics является копией графического контекста устройства и извлекает зависящий от реализации графический контекст устройства, являющийся частью программного обеспечения операционной системы устройства.

Объект Graphics, с которым вы работаете, создан реализацией Canvas при инициализации объекта Canvas. Это одна из главных причин, почему вы должны убедиться, что ваш конструктор подкласса Canvas вызывает super! Реализация пересылает графический объект в ваш Canvas, когда он вызывает метод вашего класса paint (Graphics g).

Класс Graphics

Класс Graphics поддерживает следующие абстракции:

— рисование и заливка двухмерных геометрических фигур;

— выбор цветов для графической ручки;

— выбор шрифтов для рисования текста;

— отсечение областей для рисования (clipping);

— перенос координатной системы Graphics.

Устройства различаются в своей поддержке атрибутов, таких, как цвет. Поэтому класс Display предоставляет методы:

public int isColorO

public int numColors

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

Первостепенной абстракцией, определяемой классом Graphics, является представление о Canvas, как о двухмерной сетке точек или пикселей. На рисунке 6.3 представлено схематичное изображение этой области для рисования. Графический контекст определяет эту координатную плоскость (х, у), в которой координаты лежат между пикселями, практически так же, как и курсор вашего любимого текстового редактора всегда лежит между двумя символами.

Рисунок 6.3. Класс Graphics представляет дисплей как двухмерную сетку пикселей

Базовое геометрическое рисование

Класс Graphics предоставляет операции по рисованию и заливке следующих типов геометрических фигур:

— линии;

— прямоугольники;

— дуги;

— текстовые символы.

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

Линии. На рисунке 6.4 показаны линии, нарисованные в Canvas.

Рисунок 6.4. Вы можете рисовать линии в Canvas. Вы можете сделать линии толще одного пикселя, нарисовав прилегающие линии ручкой одного цвета

В листинге 6.3 показан исходный код, который создает рисунок 6.4, но я опустил код MID-лета, который отображает это. Вы можете найти полный исходный код по адресуДля остальных примеров, приведенных в этой главе, предполагается, что отображаемые классы, которые вы видите здесь, созданы и отображаются MID-летом в стиле, сходном с примерами, которые вы видели в предыдущих главах. Исходя из этого, я покажу вам только новый код.

Листинг 6.3. Демонстрационная программа описывает метод paint , который гарантирует, что некоторые визуальные представления появляются на дисплее устройства

import javax.microedition.lcdui.Canvas;

import javax.microedition.lcdui.Command;

import javax.microedition.lcdui.CommandListener;

import javax.microedition.lcdui.Display;

import javax.microedition.lcdui.Displayable;

import javax.microedition.lcdui.Graphics;

import javax.raicroedition.lcdui.Command;

/*

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

@смотри javax.microedition.Icdui.Graphics

*/

public class LineDemo extends Canvas.

implements CommandListener

}

// Константа, которая представляет белый цвет.

private static final int WHITE = OxFF «16 | OxFF «8 I OxFF;

private Command back = new Command("Back", Command.BACK, 1);

private GraphicsDemo gDemo = GraphicsDemo.getlnstance(};

private Display display = Display.getDisplay(gDemo);

/**

Конструктор No-arg.

*/

public LineDemo

{

super ;

addCommand(back);

setCommandListener(this);

display.setCurrent(this);

}

/* *

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

"/

protected void paintdipRect (Graphics g)

}

int clipX = g.getClipX ;

int clipY = g.getClipY;

int clipH = g.getdipHeight ;

int clipW = g.getClipWidth;

int color = g.getColor ;

g. setColor(WHITE);

g. fillRect(clipX, clipY, clipW, clipH);

g. setColor (color);

}

/ **

Отображает внешний вид этого подкласса Canvas.

* /

public void paint (Graphics g)

{

paintdipRect (g);

int width = getWidth;

int height = getHeight ;

g. drawLine (20, 10, width — 20, height — 34);

g. drawLine(20, 11, width — 20, height — 33);

g. drawLine(20, 12, width — 20, height — 32);

g. drawLine(20, 13, width — 20, height — 31);

g. drawLine(20, 14, width — 20, height — 30);

g. setStrokeStyle(Graphics.DOTTED);

g. drawLine(20, 24, width — 20, height — 20);

g. drawLine(20, 25, width — 20, height — 19);

g. drawLine(20, 26, width — 20, height — 18);

g. setStrokeStyle (Graphics.SOLID);

g. drawLine(20, 36, width — 20, height — 8);

}

public void commandAction(Command c, Displayable d)

{

if (c == back)

{

GraphicsDemo.getlnstanceO.display;

}

}

}

Поделиться:
Популярные книги

Газлайтер. Том 14

Володин Григорий Григорьевич
14. История Телепата
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Газлайтер. Том 14

Лекарь Империи 9

Карелин Сергей Витальевич
9. Лекарь Империи
Фантастика:
городское фэнтези
аниме
боевая фантастика
5.00
рейтинг книги
Лекарь Империи 9

Метатель

Тарасов Ник
1. Метатель
Фантастика:
боевая фантастика
попаданцы
рпг
фэнтези
фантастика: прочее
постапокалипсис
5.00
рейтинг книги
Метатель

Четники. Королевская армия

Тимофеев Алексей Юрьевич
Документальная литература:
биографии и мемуары
публицистика
5.00
рейтинг книги
Четники. Королевская армия

Ефрейтор. Назад в СССР. Книга 2

Гаусс Максим
2. Второй шанс
Фантастика:
попаданцы
альтернативная история
7.00
рейтинг книги
Ефрейтор. Назад в СССР. Книга 2

Бастард Императора. Том 16

Орлов Андрей Юрьевич
16. Бастард Императора
Фантастика:
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Бастард Императора. Том 16

Оранжерейный цветок

Ритчи Криста
2. Сёстры Кэллоуэй
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Оранжерейный цветок

Встреча

Видум Инди
7. Петя и Валерон
Фантастика:
рпг
аниме
попаданцы
5.00
рейтинг книги
Встреча

Кодекс Охотника. Книга XXVI

Винокуров Юрий
26. Кодекс Охотника
Фантастика:
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XXVI

Мастер 4

Чащин Валерий
4. Мастер
Фантастика:
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Мастер 4

Эпоха Опустошителя. Том V

Павлов Вел
5. Вечное Ристалище
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Эпоха Опустошителя. Том V

Студент из прошлого тысячелетия

Еслер Андрей
2. Соприкосновение миров
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Студент из прошлого тысячелетия

Родословная. Том 5

Ткачев Андрей Юрьевич
5. Линия крови
Фантастика:
городское фэнтези
аниме
фэнтези
5.00
рейтинг книги
Родословная. Том 5

1941: Время кровавых псов

Золотько Александр Карлович
1. Всеволод Залесский
Приключения:
исторические приключения
6.36
рейтинг книги
1941: Время кровавых псов