В демонстрационной программе (которую вы можете найти в Web на сайте http://www.phptr.com), прокрутите вниз экран Build Alert (Создание уведомления) и вы увидите объект текстового поля, который содержит строку «5». Вы можете отредактировать этот объект TextField, который является другим компонентом пользовательского интерфейса, чтобы изменить значение времени истечения. Если вы укажете 0, приложение создаст уведомление с FOREVER (НИКОГДА) в качестве времени истечения.
TextField является последним новым компонентом, который вводит эта демонстрационная программа. TextField также является разновидностью Item, как показано на рисунке 5.1. TextField — это один из двух компонентов для ввода текста. Другим является TextBox, который мы обсудим далее в этой главе. Компоненты для ввода текста используют понятие ограничения ввода, которое ограничивает ввод до определенного набора разрешенных знаков, определяемого действующими ограничениями компонента.
Класс TextField определяет различные виды ограничений, устанавливаемые константами, перечисленными в таблице 5.3.
Таблица 5.3.Типы ограничений, устанавливаемые классом TextField
Константа ограничения — Описание
ANY— Любые буквенно-цифровые знаки
EMAILADDR— Только синтаксически правильный e-mail
NUMERIC— Только цифровые знаки
PASSWORD— Знаки не отображаются на дисплее
PHONENUMBER— Только цифровые знаки, реализация предоставляет задание формата
URL— Только синтаксически правильный LJRL
Вы определяете ограничения в конструкторе, чтобы создать экземпляр с желаемыми текстовыми атрибутами. Чтобы создавать экземпляры, которые поддерживают обработку комбинации текстовых категорий, перечисленных в таблице 5.3, укажите логический AND этих категорий. Вы можете определить установленные ограничения, исследовав поле CONSTRAINT_MASK объекта TextField.
Экранная навигация
На данный момент вы познакомились со следующими компонентами пользовательского интерфейса:
— MIDlet;
— Display;
— Displayable;
— Form;
— List;
— Alert;
— ChoiceGroup;
— TextField.
Вы уже можете создавать приложения MIDP — с их помощью. Демонстрационная программа, показанная в листинге 5.3, обращается к другому атрибуту программ с графическим пользовательским интерфейсом: экранной навигации. Если вы возвратитесь назад и взглянете на приложение, описанное в листинге, более внимательно, вы увидите, что вы можете перейти назад к предыдущему экрану из любой точки. Это свойство присутствует в большинстве программ с графическим интерфейсом пользователя.
Однако такое поведение в MIDP не является автоматическим. Только один Displayable видим в любой момент времени и реализация не отслеживает какой-либо информации об отображаемых экранах.
Переход «вперед» легок. Как демонстрируется в приложениях, вы просто создаете следующий Displayable и делаете запрос на его отображение. Но переход «назад» немного сложнее. Вам придется убедиться, что у вас есть действующая ссылка на экранный объект, к которому вы хотите возвратиться.
Обратите внимание, что каждый класс, который вы видели до сих пор в демонстрационной программе, поддерживает ссылку на экземпляр, созданный приложением. В UIComponentDemo.java, например, это следующее объявление элемента:
projected static Displayable instance;
Это объявление имеет следующий сопутствующий метод:
public static Displayable getlnstance()
{
return instance;
}
Данйый метод объявляется с модификатором static, так что на него можно легко создать Ссылку из любого места в приложении без создания экземпляра класса, содержащего этот метод — таким образом можно избежать неправильного цикла работы приложения.
Приложение AlertDemo предоставляет экранную клавишу Back(Назад) на экране Build Alert (Создание уведомления), показанном на рисунке 5.3. Если вы нажмете эту клавишу, вы вернетесь обратно в главное окно. Посмотрите вновь на метод commandAction() данной программы, которая показана в листинге 5.4.
Листинг 5.4.Блок прослушивания команд должен находить ссылку на экземпляр любого экрана приложения, к которому он хочет вернуться
public void commandAction(Command c, Displayable d)
{
UIComponentDemo jiemo = UIComponentDemo.get Instance ();
Display display = Display.getDisplay(demo);
int timeSec;
int cimeMillis;
if (c == go)
}
// Уведомления не принимаются приложением, определяющим Commands.
String title = elements[type.getSelectedlndex()];
Alert alert = new Alert(title);;
alert.setString("A " + title + " alert");
timeSec = Integer.parselnt(tPref.getString());
timeMillis. = timeSec * 1000;
if (timeMillis <= 0)
Читать дальше