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

import javax.microedition.lcdui.Command;

import javax.microedition.Icdui.ComraandListener;

import javax.microedition.Icdui.Displayable;

import javax.microedition.Icdui.Form;

import javax.microedition.Icdui.Image;

import javax.microedition.Icdui.Imageltem;

import Java.io.lOException;

/**

Этот класс демонстрирует использование класса Imageltem пользовательского интерфейса MIDP.

@смотри javax.microedition.Icdui.Imageltem

*/

public class ImageltemDemo extends Form implements CommandListener

{

private Imageltem imageltem;

/**

Конструктор.

@сбрасывает lOException, если указанный ресурс изображения не может быть найден.

public ImageltemDemo() throws lOException

*/

super("Imageltem Demo");

String path = "/bottle80x80.png";

Image image = Image.createlmage(path);

imageltem = new Imageltem)"Ship in a bottle", image,

Imageltem.LAYOUT_CENTER,

"Image not found"); append(imageltem);

addCommand(back);

setCommandListener(this);

instance = this;

}

}

В листинге 5.9 демонстрируется использование класса Imageltem компонента пользовательского интерфейса MIDP. Imageltem является подклассом Item, так что он должен быть размещен в Form, как было продемонстрировано в листинге.

Прежде чем вы сможете отобразить изображение, вы должны создать объект изображения. Класс javax.microedition.lcdui.Image определяет изображения. Чтобы создать экземпляр Image, укажите имя пути к файлу изображения. Файлы изображений должны храниться в формате Portable Network Graphics (PNG). J2ME поддерживает работу с изображениями только в этом формате.

Обратите внимание, что в листинге 5.9 имя пути файла изображения связано с директорией res/ директории проекта UlComponents. Директория res/ содержит все файлы ресурсов, включая файлы изображений. Если вы разместите свои изображения где-либо еще, они не будут найдены и ваша программа сбросит lOException, когда попытается открыть файл.

В листинге 5.9 конструктор создает Imageltem с помощью только что созданного объекта Image. Параметрами конструктора являются строка заголовка, которая отображается над изображением, объект изображения, указание размещения изображения и текстовая строка, которая будет показана в случае, если изображение не может быть отображено по какой-либо причине.

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

Таблица 5.5. Компоненты пользовательского интерфейса MIDP, которые используют изображения

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

Alert — Изображение отображается вместе с текстом

ChoiceGroup — Изображение отображается слева от текста каждого элемента

List — Изображение отображается слева от текста элемента

Imageltem — Предоставляет контроль размещения самого объекта изображения

Классы ChoiceGroup и List могут отображать изображения как часть представления каждого из своих элементов. API для этих классов четкий и прямолинейный, так что я не буду показывать примеры для них. Та же идиома создания объекта изображения и передачи его компоненту применяется для всех компонентов пользовательского интерфейса MIDP, которые используют изображения.

Другие экранные типы

Вы видели все компоненты MIDP за исключением одного: TextBox. В отличие от TextField TextBox является многострочной редактируемой текстовой областью. Взгляните еще раз на наглядную иерархию наследования, показанную на рисунке 5.1, и вы увидите, что TextBox является видом Screen, а не Item.

Поскольку TextBox является Displayable, вы должны создать объект MID-лета для демонстрации его использования, вы не можете разместить его в другом Screen или Form, как вы могли поступить с компонентами, происходящими от Item. На рисунке 5.11 показан экран TextBoxDemo.

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

Рисунок 5.11. Экран TextBoxDemo

Ha рисунке 5.11 показан сам экземпляр TextBox, который является Screen. В листинге 5.10 показан частичный исходный код класса TextBoxDemo. Части, которые опущены, являются структурно очень сходными с кодом UIComponentDemo и имеют отношение к атрибутам МШ-лета.

Листинг 5.10. Текстовые окна являются экранами и не нуждаются в форме, в которой можно существовать

import jav,ax.micro etiition.lcdui. Command;

import javax.microedition.lcdui.CommandListener;

import javax.microedition.lcdui.Display;

import javax.microedition.lcdui.Displayable;

import javax.microedition.lcdui.Form;

import javax.microedition.lcdui.TextBox;

import javax.microedition.lcdui.TextField;

import javax.microedition.midlet.MIDlet;

/**

Этот MID-лет демонстрирует использование отображаемого элемента TextBox пользовательского интерфейса MIDP.

@смотри javax.microedition.Icdui.TextBox

* /

public class TextBoxDemo extends MIDlet implements CommandListener

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

private static TextBoxDemo instance;

// Компонент пользовательского интерфейса TextBox. private TextBox textBox;

// Максимальное число знаков, которое TextBox может

// поддерживать. private int MAX_SIZE = 100;

// Первоначальный текст в TextBox. private String initialText =

"You can edit the contents of this TextBox";

/**

Конструктор.

*/

public TextBoxDemo()

super (); instance = this;

}

public void pauseApp()

{

.

}

public void destroyApp(boolean destroy)

}

textBox = null; initialText = null; instance = null;

}

void quit()

}

destroyApp (true);

notifyDestroyed();

public void startApp()

{

texcBox = new TextBoxC'A TextBox", initialText, MAX_SIZE,

TextField.ANY); сextBox.addCommand(quit); textBox.setCommandListener(this);

display();

}

/**

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

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

*/

public static TextBoxDemo getlnstance()

return instance;

}

public void display!)

{

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

}

public void commandAction(Command c, Displayable d)

if (c == quit)

{

quit();

}

}

}

Вы можете видеть из конструктора, что TextBox сходен с TextField, за исключением того, что он является многострочной текстовой областью. Аргументами являются заголовок, первоначальный текст, максимальное количество знаков, которое он может поддерживать, и ограничения ввода. Ограничения являются абсолютно теми же, что и в классе TextField.