Твое первое приложение для мобилы
Андрей "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!");