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

на главную

Жанры

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

Класс 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;

}

}

}

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

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

Володин Григорий
10. История Телепата
Фантастика:
боевая фантастика
5.00
рейтинг книги
Газлайтер. Том 10

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

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

Вторая невеста Драконьего Лорда. Дилогия

Огненная Любовь
Вторая невеста Драконьего Лорда
Любовные романы:
любовно-фантастические романы
5.60
рейтинг книги
Вторая невеста Драконьего Лорда. Дилогия

Одиссея адмирала Кортеса. Тетралогия

Лысак Сергей Васильевич
Одиссея адмирала Кортеса
Фантастика:
попаданцы
альтернативная история
9.18
рейтинг книги
Одиссея адмирала Кортеса. Тетралогия

Мир в прорези маски

Осинская Олеся
1. Знакомые незнакомцы
Фантастика:
фэнтези
юмористическое фэнтези
9.46
рейтинг книги
Мир в прорези маски

Кодекс Крови. Книга II

Борзых М.
2. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга II

Идеальный мир для Социопата 13

Сапфир Олег
13. Социопат
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Идеальный мир для Социопата 13

Отряд

Валериев Игорь
5. Ермак
Фантастика:
альтернативная история
5.25
рейтинг книги
Отряд

Пожиратель душ. Том 1, Том 2

Дорничев Дмитрий
1. Демон
Фантастика:
боевая фантастика
юмористическая фантастика
альтернативная история
5.90
рейтинг книги
Пожиратель душ. Том 1, Том 2

Убивать чтобы жить 2

Бор Жорж
2. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 2

Охота на попаданку. Бракованная жена

Герр Ольга
Любовные романы:
любовно-фантастические романы
5.60
рейтинг книги
Охота на попаданку. Бракованная жена

Золушка по имени Грейс

Ром Полина
Фантастика:
фэнтези
8.63
рейтинг книги
Золушка по имени Грейс

Цеховик. Книга 2. Движение к цели

Ромов Дмитрий
2. Цеховик
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Цеховик. Книга 2. Движение к цели

Баоларг

Кораблев Родион
12. Другая сторона
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Баоларг