Твое первое приложение для мобилы

Андрей "Orc" Серегин

Xakep, номер #060, стр. 060-086-3


Static Final String AGAIN_COMMAND_LABEL = "Продолжить";

Определяем класс Display из библиотеки Midlet. Этот класс предназначен как раз для взаимодействия с пользователем и использует только один объект GetDisplay. Как его использовать - чуть ниже:

Display Display;

Static Hello Hello;

Для завершения работы мидлета используется метод DestroyApp. После этого отсылается сообщение виртуальной Java-машине - NotifyDestroyed. Делается это так:

Protected Void DestroyApp (boolean b)

{

Display.SetCurrent(null);

This.NotifyDestroyed();

}

Мидлет, в отличие от обычного аплета, способен находиться в состоянии паузы, например, когда на экране выводится какое-либо сообщение. Для перехода в режим паузы создан метод PauseApp, а для возвращения в нормальной режим работы - StartApp.

Protected Void PauseApp ()

{ }

Теперь хотелось бы подробнее остановиться на классе Canvas, который является потомком абстрактного Displayable. Canvas необходим для взаимодействия с пользователем на уровне перерисовки экрана или отлова нажатий клавиатуры, т.е. на весьма низком уровне. В классе StartApp мы описываем команды пользовательского меню ("Выход" и "Продолжить"), добавляем команды в меню, устанавливаем обработчик нажатий клавиш и проигрываем звук PEEP из стандартного набора:

Protected Void StartApp ()

{

HelloCanvas Canvas = New HelloCanvas();

Display = Display.GetDisplay(This);

Command ExitCommand = New Command(EXIT_COMMAND_LABEL , Command.SCREEN, 0);

Command AgainCommand = New Command(AGAIN_COMMAND_LABEL, Command.SCREEN, 1);

Canvas.AddCommand(ExitCommand);

Canvas.AddCommand(AgainCommand);

Canvas.SetCommandListener(this);

Display.SetCurrent(canvas);

COM.Siemens.Mp.Game.Sound.PlayTone(COM.Siemens.Mp.Game.Sound.PEEP);

}

У интерфейса CommandLister есть один-единственный метод CommandAction. Вот им-то мы сейчас и воспользуемся. Смысл таков: если пользователь выбирает в меню "Выход", то мы вызываем метод DestroyApp (описанный чуть ранее). Если же он выберет "Продолжить" - смело продолжаем показывать ему Hello, World!

Public Void CommandAction (Command c, Displayable d)

{

String Label = c.GetLabel();

If (Label == EXIT_COMMAND_LABEL )

{

DestroyApp (false);

}

Else If (Label == AGAIN_COMMAND_LABEL )

{ }

}

}

Вот, собственно, и добрались до класса, который выводит заветное "Hello, World!" на экране телефона. Итак, объявляем класс HelloCanvas как расширяющий Canvas:

Class HelloCanvas Extends Canvas

{

Объявляем абстрактный метод Paint с объектом g, связанный с полученным на экране изображением:

Public Void Paint (Graphics g)

{

Далее определяем тип шрифта, которым мы отобразим надпись "Hello, World!": шрифт Proportional, стиль Bold, размер Large и черный цвет (за неимением цветного экрана ставим компоненты Red, Green и Blue в методе SetColor равными нулю):

Font Font = Font.GetFont(Font.FACE_PROPORTIONAL, Font.STYLE_BOLD, Font.SIZE_LARGE);

g.SetFont(Font);

g.SetColor(0,0,0);

Потом помещаем выводимый текст в строковую переменную Str и отцентровываем ее в соответствии с полученными размерами экрана, поделенными на 2:

String str = New String("Hello, World!");

Назад на стр. 060-086-2  Содержание  Вперед на стр. 060-086-4