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

на главную

Жанры

Шрифт:

Класс Canvas является абстрактным. Чтобы его использовать, вы должны организовать его подклассы. Ваш конкретный подкласс описывает новый компонент с поведением по обработке команд и событий и с помощью класса Graphics определяет свой собственный внешний вид. Подкласс предоставляет возможности по обработке и визуализации событий, отличающиеся от тех, что предоставляют компоненты Screen.

Oбработка команд и событий

В компоненте Canvas вы можете добавлять и удалять высокоуровневые команды и устанавливать один блок прослушивания команд на Canvas, как

и в других отображаемых компонентах. Canvas также может внедрять CommandListener и регистрироваться как свой собственный блок прослушивания.

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

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

Таблица 6.1. Методы уведомления о событиях низкоуровневого API

Название метода — Описание

protected void keyPressed(int KeyCode) — Клавиша была нажата и отпущена

protected void keyReleased.(int KeyCode) — Клавиша была отпущена

protected void keyRepeated(int KeyCode) — Клавиша была нажата несколько раз

protected void pointerPressed(int x, int y) — Указатель был нажат

protected void pointerDragged(int x, int y) — Указатель был перемещен

protected void pointerReleased(int x, int y) — Указатель был отпущен

protected abstract void paint(Graphics g) — Произошел запрос Canvas на перерисовку

Для выполнения обработки событий низкого уровня ваш конкретный подкласс Canvas должен подменять один или больше методов, перечисленных в таблице 6.1. Не подменяя пустые описания класса Canvas, вы пропускаете события и вышеупомянутую возможность их обработки. Кроме того, ваш подкласс Canvas должен описывать метод paint , который объявляется абстрактным в Canvas.

В листингах 6.1 и 6.2 представлена простая схема обработки команд и событий в Canvas. Код в листинге 6.1 является кодом MID-лета для демонстрационной программы, большая часть которой выглядит знакомо. Код в листинге 6.2, однако, создает подкласс Canvas — Displayable, который согласно коду, показанному в листинге 6.1, размещается на экране.

Листинг 6.1. Демонстрационной программе CanvasDemol требуется MID-лет, как и любое другое приложение МIDР

import javax.microedition.midlet.MIDlet;

import javax.microedition.lcdui.Display;

/"

Определяет MID-лет, отображающий пустой Canvas на дисплее устройства.

Отображаемый Canvas является Экземпляром класса Canvasl.

@смотри Canvasl

*/

public class CanvasDemol extends MIDlet

{

// Поддерживает ссылку на экземпляр данного класса.

private static CanvasDemol midlet;

// Поддерживает ссылку на Canvas, который пользователь

// видит на дисплее.

private static Canvasl instance;

private Display display; private Canvasl canvas;

/**

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

Вызывает конструктор no-arg класса MID-лета.

*/

public CanvasDemol

super;

display = Display.getDisplay(this); instance = canvas; midlet = this;

{

/**

Возвращает ссылку на MID-лет, связанный с данным отображаемым объектом.

@возвращает MID-лет, который отображает этот объект.

**/

public static CanvasDemol getMIDlet

{

return midlet;

{

public void startApp

{

canvas = new Canvasl ;

display.setCurrent(canvas);

(

public void pauseApp

{

}

public void destroyApp(boolean destroy)

{

instance = null;

canvas = null;

void quit

{

destroyApp(true);

notifyDestroyed;

}

}

Листинг 6.2. Чтобы использовать Canvas, вы должны создать подкласс Canvas

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;

/**

Определяет подкласс Canvas, который отображается с помощью MID-лета CanvasDemol. Этот Canvas имеет единственную команду «Exit», так что пользователь может завершить работу демонстрационной программы.

@Осмотри CanvasDemol

*/

public class Canvasl extends дополняет Canvas

implements CommandListener

{

private Command exit = new Command("Exit", Command.EXIT, 1);

/**

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

*/

public Canvasl

{

// Обратите внимание на вызов super , который является конструктором

// r.o-arg Canvas! Это очень важно. Без вызова super ваши экземпляры

// Canvas не смогут действовать как настоящие Canvas. Они не будут

// отображать правильно, они не будут рисовать должным образом и они

// не смогут обрабатывать события, super ;

addCommand(exit); setCommandListener (this);

printCanvasInfo;

}

/**

Рисует внешний вид Canvas, видимый пользователю.

В данном случае он не рисует ничего.

Поэтому этот Canvas не имеет визуального представления.

*/

public void paint(Graphics g)

{

}

public void commandAction(Command c, Displayable d)

{

if (c == exit)

CanvasDemol.getMIDlet. quit;

}

/**

Определяет, что обработка должна быть сделана в ответ на событие отпускания клавиши, произошедшее в данном Canvas.

Этот метод подменяет тот же самый метод в Canvas.

*/

public void keyReleased(int keyCode)

{

printKeyEventlnfo(keyCode);

}

/**

Определяет некоторую обработку событий, связанных с клавишами.

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

*/

protected void printKeyEventlnfо(int keyCode)

{

System.out.println("Key code = " + keyCode);

System.out.println("Key name = " + getKeyName(keyCode));

System.out.println("Game action = " + getGameAction(keyCode));

}

/* *

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

Путь Шедара

Кораблев Родион
4. Другая сторона
Фантастика:
боевая фантастика
6.83
рейтинг книги
Путь Шедара

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

Винокуров Юрий
21. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XXI

Драконий подарок

Суббота Светлана
1. Королевская академия Драко
Любовные романы:
любовно-фантастические романы
7.30
рейтинг книги
Драконий подарок

Неудержимый. Книга XVIII

Боярский Андрей
18. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XVIII

Сумеречный стрелок

Карелин Сергей Витальевич
1. Сумеречный стрелок
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сумеречный стрелок

Уязвимость

Рам Янка
Любовные романы:
современные любовные романы
7.44
рейтинг книги
Уязвимость

Путь (2 книга - 6 книга)

Игнатов Михаил Павлович
Путь
Фантастика:
фэнтези
6.40
рейтинг книги
Путь (2 книга - 6 книга)

Я – Орк. Том 5

Лисицин Евгений
5. Я — Орк
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Я – Орк. Том 5

Совок

Агарев Вадим
1. Совок
Фантастика:
фэнтези
детективная фантастика
попаданцы
8.13
рейтинг книги
Совок

Авиатор: назад в СССР

Дорин Михаил
1. Авиатор
Фантастика:
попаданцы
альтернативная история
5.25
рейтинг книги
Авиатор: назад в СССР

На границе империй. Том 9. Часть 2

INDIGO
15. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 2

Доктора вызывали? или Трудовые будни попаданки

Марей Соня
Фантастика:
юмористическая фантастика
попаданцы
5.00
рейтинг книги
Доктора вызывали? или Трудовые будни попаданки

Совершенный: пробуждение

Vector
1. Совершенный
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Совершенный: пробуждение

Энфис 4

Кронос Александр
4. Эрра
Фантастика:
городское фэнтези
рпг
аниме
5.00
рейтинг книги
Энфис 4