Изменить стиль страницы

— визуализация элементов пользовательского интерфейса;

— обработка событий.

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

Команды получают только семантическую информацию о «событии». Команда не представляет собой поведение или действие, которое осуществляется в ответ на событие. Блоки прослушивания команд задают поведение команд, определяя обработку, которая осуществляется в результате запуска команды реализацией.

Определенная политика размещения меток команд на экране зависит от реализации. MIDP устанавливает, что размещение команд в меню должно быть сделано в соответствии с типом команды.

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

Глава 5. Компоненты пользовательского интерфейса MIDP

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

Иерархия Компонентов пользовательского интерфейса MIDP

Диаграмма иерархии наследования MIDP, показанная на рисунке 5.1, повторяет то, что вы уже видели на рисунке 3.7 в главе 3. Вы уже видели некоторые из компонентов пользовательского интерфейса MIDP, показанные в этой иерархии, а именно Displayable, Screen, Form и Alert.

Вы знаете, что класс Displayable определяет природу основы любого компонента, который может быть отображен, и что класс Screen определяет базовую абстракцию пользовательского интерфейса MIDP — экран. Класс Screen является первым Displayable, который вы видели, a Form был первым конкретным типом используемого экрана.

В таблице 5.1 кратко описаны все компоненты пользовательского интерфейса MIDP в пакете javax.micfoedition.lcdui.

Платформа J2Me _32.jpg

Рисунок 5.1. Компоненты пользовательского интерфейса MIDP принадлежат либо к классу объектов Displayable, либо к классу объектов Item за исключением класса Ticker, который происходит от Object.

Платформа J2Me _34.jpg

— абстрактный класс,

Платформа J2Me _35.jpg

— конкретный класс

Таблица 5.1. Описание всех компонентов интерфейса пользователя MIDP

Имя класса компонента, Ul MIDP — Описание — Принадлежность к- API MIDP

Alert — Информационное всплывающее окно, может быть модальным или рассчитанным по времени — Высокоуровневый

AlertType — Определяет типы объектов Alert — Высокоуровневый

Canvas — Экран, в котором вы можете рисовать графические объекты и получать низкоуровневые события ключ/перо — Низкоуровневый

ChoiceGroup — Группа выбираемых элементов, находится в Form — Высокоуровневый

Command — Семантическая инкапсуляция событий пользовательского интерфейса — Как высокоуровневый, так и низкоуровневый

DateField — Компонент, который отображает дату и время — Высокоуровневый

Display — Класс, который извлекает структуры данных дисплея устройства — Высокоуровневый

Displayable — Прародитель всех компонентов, которые могут быть отображены — Как высокоуровневый, так и низкоуровневый

Font — Класс, предоставляющий шрифты для экранного текста — Высокоуровневый

Form — Экран, который собирает элементы для отображения — Высокоуровневый

Gauge — Тип визуального измерителя — Высокоуровневый

Graphics — Отображение контекста графических элементов устройства — Низкоуровневый

Image — Отображение изображений в формате Portable Network Graphics [PNG, переносимая сетевая графика] — Как высокоуровневый, так и низкоуровневый

Imageltem — Form, размещающий отображение изображения — Высокоуровневый

List — Список выбираемых объектов — Высокоуровневый

Screen — Абстрактный прародитель всех типов экранов — Высокоуровневый

Stringltem — Form, размещающий отображение строки — Высокоуровневый

TextBox — Многострочный, многоколонковый текстовой контейнер — Высокоуровневый

TextField — Однострочный текстовой контейнер — Высокоуровневый

Ticker — Отображение тикера — Высокоуровневый

Экраны и экранные элементы

Первый пример в этой главе показывает вам основную разницу между двумя типами компонентов пользовательского интерфейса MIDP: компонентами Displayable и компонентами Item. Иерархия наследования, изображенная на рисунке 5.1, ясно отображает Эти две категории. Иерархия Displayable заключает в себе экраны, которые вы отображаете. Иерархия Item классифицирует элементы, которые могут быть собраны в один экран. Следующие примеры демонстрируют использование различных компонентов пользовательского интерфейса MIDP. Мы объясняем их использование по мере ознакомления с каждым.

В листинге 5.1 показан файл под названием UIComponentDemo.java, который определяет исходный код новой программы, демонстрирующий использование элементов MIDP. Этот файл использует код в других файлах, которые вместе составляют полную демонстрационную программу компонента пользовательского интерфейса.

Листинг 5.1. Исходный код UlComponentDemo

import javax.raicroedition.midlet.MIDlet;

import javax.microedition.lcdui.Choice;

import javax.microedition.lcdui.Command;

import javax.microedition.lcdui.CommandListener;

import javax.microedition.lcdui.Display;

import javax.microedition.lcdui.Displayable;

import javax.microedition.Icdui.List;

/**

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

*/

public class UlComponentDemo extends MIDlet

implements CommandListener

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

// Имена различных демонстрационных программ: Элементы в этом списке

// являются именами первичных классов для каждой демонстрационной

// программы, private static String [] demos =

"AlertDemo",

"DateFieldDemo",

"GaugeDemo",

"StringltemDemo", "TickerDemo",

"ImageltemDemo"

}i;

private static UIComponentDemo instance = null;

// Реальный компонент List, который отображает элементы,

// перечисленные в списке «demos» выше.

private List mainMenu = new List ("Select demo", Choice.IMPLICIT,

demos, null);

// Конструктор No-arg. public UIComponentDemo()

// Обратите внимание на вызов super(). Он выполняет

// конструктор no-arg в классе MID-лета. super ();

instance = this;

}

/**

Возвращает один экземпляр этого класса. Вызов этого метода перед созданием объекта возвратит пустой указатель.

^возвращает экземпляр этого класса.

*/

public static UIComponentDemo getlnstance()

{

return instance;

{

public void startApp()

{

Display display;

mainMenu.addCommand(exit);

mainMenu.setCommandListener(this);

*

display = Display.getDisplay(this);

display.setCurrent(mainMenu);

public void pauseApp()

{

}

void quit(),

destroyApp(true); notifyDestroyed();

)

public void destroyApp(boolean destroy)

(

}

public void display!)

}

Display.getDisplay(this). setCurrent(mainMenu);

}

public void commandAction(Command c, Displayabie d)

{

Displayabie displayable = null;

if (c == List.SELECT_COMMAND)

{

int index = mainKenu.getSeiectedlndex(); try

{

displayable = (Displayable)

Class.forName(demos[index]). new!nstance();

if (displayable == null)

}

return;

}

Display display = Display.getDisplay(this);

display.setCurrent(displayable);

}

catch (Exception e)

{

System.out.println("Got exception here!!!");

e. printStackTrace();

return;

}

}

else if (c == exit) 1 quit();

}

}

}