Програмна структура MID-лета.




ЗНАЕТЕ ЛИ ВЫ?

Програмна структура MID-лета.



Нижче дається MIDP версія знайомої програми Hello World.

 

Приклад 1.

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

 

public class HelloWorld extends MIDlet {

private Display display; // The display for this MIDlet

private Form form; // This component will be visible on screen

 

public HelloWorld () {

display = Display.getDisplay(this);

}

 

public void startApp() {

form = new Form("Hello, World");

form.append("My first MIDlet");

display.setCurrent(form);

}

 

public void pauseApp() {

}

 

public void destroyApp(boolean unconditional) {

form = null;

notifyDestroyed();

}

}

 

Якщо запустити цю програму на виконання з допомогою Sun ONE Studio (Microedition), ви побачите наступне вікно емулятора

 

Пояснення до програми.

 

Перш за все слід відзначити, що даний клас HelloWorld розширює javax.microedition.midlet.MIDP. Всі MID-лети повинні розширювати даний клас.

Клас HelloWorld є основним класом нашої програми. Тому він повинен бути оголошеним як public та мати конструктор без аргументів.

Крім того, в класі, котрий розширює MIDP повинні бути визначені наступні методи:

- public void startApp()

- public void pauseApp()

- public void destroyApp(boolean unconditional)

Ці методи оголошені в суперкласі, як абстрактні.

 

В основному класі відсутній метод main(). І в цьому сенсі MID-лет не є повноцінною Java програмою. Таким головним методом, котрий замінює main є метод startApp(). Саме в цьому методі ініціалізується об’єкт form, де до нього додається стрічка:

form.append("My first MIDlet");

Назва форми задається в її конструкторі:

form = new Form("Hello, World").

 

3. Обробка команд.

Високорівневий API MIDP підтримує обробку подій з допомогою команд. Клас Command в пакаті javax.microedition.lcdui містить інформацію про:

- мітку (label);

- пріоритет команди (priority);

- тип команди (command type).

 

Мітка – це String, котра знаходиться на дисплеї, задає назву команди. Пріоритет – це int – відображає важливість даної команди по відношенню до інших команд.

Типи команд це константи public static int:

Тип команди Опис
BACK Повернення до логічно попереднього екрану
CANCEL Стандартна негативна відповідь на запит в діалозі
EXIT Вихід з програми
HELP Запит на допомогу в онлайновому режимі
ITEM Підказки для вибраного елемента
OK Стандартна позитивна відповідь на запит в діалозі
SCREEN Команда, котра задається програмно
STOP Зупинка операції, котра виконується на даний момент

 

Приклад 2.

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

 

public class HelloWorld2 extends MIDlet implements CommandListener {

 

private Command exitCommand; // The exit command

private Command showAlert;

private Alert alert;

private Display display; // The display for this MIDlet

private TextBox t;

 

public HelloWorld2() {

display = Display.getDisplay(this);

exitCommand = new Command("Exit", Command.SCREEN, 2);

showAlert = new Command("Alert Me!", Command.SCREEN, 2);

}

 

public void startApp() {

t = new TextBox("Hello MIDlet", "My Second MIDlet", 256, 0);

 

t.addCommand(exitCommand);

t.addCommand(showAlert);

 

t.setCommandListener(this);

 

display.setCurrent(t);

}

 

public void pauseApp() {

}

 

public void destroyApp(boolean unconditional) {

}

 

public void commandAction(Command c, Displayable s) {

if (c == exitCommand) {

destroyApp(false);

notifyDestroyed();

}

else if (c == showAlert)

{

alert = new Alert("Button Pressed", "The Alert Me pressed", null, AlertType.INFO);

 

alert.setTimeout(Alert.FOREVER);

display.setCurrent(alert, t);

}

}

}

 

Запустивши цю програму ми побачимо наступне вікно:

 

А якщо ми натиснемо клавішу “Alert Me” з’явиться наступне повідомлення:

 

Пояснення до прикладу.

В даному прикладі ми створюємо дві команди:

exitCommand = new Command("Exit", Command.SCREEN, 2);

showAlert = new Command("Alert Me!", Command.SCREEN, 2);

Потім ми повинні додати команди до форми:

t.addCommand(exitCommand);

t.addCommand(showAlert);

Додаємо прослуховувач подій до класу HelloWorld2:

t.setCommandListener(this);

при цьому ми повинні вказати, що даний клас імплементує інтерфейс прослуховувача:

public class HelloWorld2 extends MIDlet implements CommandListener

 

Прослуховувач визначає одну функцію:

public void commandAction(Command c, Displayable s) {

if (c == exitCommand) {

destroyApp(false);

notifyDestroyed();

}

else if (c == showAlert)

{

alert = new Alert("Button Pressed", "The Alert Me pressed", null, AlertType.INFO);

 

alert.setTimeout(Alert.FOREVER);

display.setCurrent(alert, t);

}

}

 

В цій функції ми описуємо реакцію на виконання команд exitCommand та showAlert.

У випадку, якщо вибрана команда exitCommand – програма завершується.

Якщо команда showAlert – буде показане повідомлення.

Alert – це MIDP аналог звичайного діалогового вікна. Існують такі типи Alert:

ALARM, CONFIRMATION, ERROR, INFO, WARNING.

 

Функція setTimeout(int time) – задає час в мілісекундах, на протязі якого діалог буде показаний на екрані. Якщо параметр Alert.FOREVER – ми отримуємо аналог модального діалогу.

 

4. Приклад простої програми.

В J2ME контейнером служить також клас List – це компонент, котрий дозволяє здійснити вибір одного рядка із списку. Конструктор:

List(String title, int listType, String[] stringElements, Image[] imageElements)

Дозволяє створити список із заданими рядками та відповідними іконками.

Інший компонент, котрий дозволяє здійснити вибір одного або декількох рядків із списку – ChoiceGroup. Його конструктор виглядає аналогічно до List. При цьому ChoiceGroup може бути двох типів:

Choice.EXCLUSIVE або Choice.MULTIPLE.

В першому випадку список є аналогом JradioButton, в другому – JcheckBox.

 

Приклад 3. (Даний приклад складається з двох файлів)

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

 

public class Lab8MIDlet extends MIDlet implements CommandListener {

 

private Command exitCommand = new Command("Exit", Command.SCREEN, 2); // The exit command

private Command selectorCommand = new Command("Select", Command.SCREEN, 2);

 

Display display; // The display for this MIDlet

 

private String uiItems[] = {"Choice Group", "Alert", "Date Field"};

 

List main;

public TestChoiceGroup testChoiceGroup;

 

private static Lab8MIDlet instance;

 

public Lab8MIDlet()

{

System.out.println("application started");

this.instance = this;

display = Display.getDisplay(this);

 

this.initScreens();

}

 

private void initScreens()

{

this.testChoiceGroup = new TestChoiceGroup();

}

 

public static Lab8MIDlet getInstance()

{

return instance;

}

 

public void startApp() {

main = new List("select UI", List.IMPLICIT, uiItems, null);

 

main.setCommandListener(this);

//main.setSelectCommand(selectCommand);

main.addCommand(exitCommand);

main.addCommand(selectorCommand);

main.setCommandListener(this);

 

display.setCurrent(main);

}

 

public void pauseApp() {

}

 

public void destroyApp(boolean unconditional) {

}

 

public void commandAction(Command c, Displayable s) {

if (c == exitCommand) {

destroyApp(false);

notifyDestroyed();

}

else if (c == selectorCommand)

{

System.out.println("select command");

switch(main.getSelectedIndex())

{

case 0: TestChoiceGroup tcg = new TestChoiceGroup();

display.setCurrent(tcg); break;

 

}

}

}

};

 

 

Другий файл.

package Lab8;

 

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

 

class TestChoiceGroup extends Form implements CommandListener

{

private Command back = new Command("Back", Command.BACK,1);

 

private ChoiceGroup chgExclusive;

private String exclusive[] = {"First", "Second","Third"};

 

private ChoiceGroup chgMultiple;

private String multiple[] = {"Green", "Red","Blue"};

 

public TestChoiceGroup()

{

super("Choice Groups and TextField");

this.chgExclusive = new ChoiceGroup("Choice Group (Exclusive)", ChoiceGroup.EXCLUSIVE,

exclusive, null);

this.append(this.chgExclusive);

 

Image app = null;

try

{

app = Image.createImage("/Lab8/App.png");

}

catch(java.io.IOException e)

{

System.out.println("Image not found");

}

 

Image image[] = {app, app, app};

this.chgMultiple = new ChoiceGroup("Choice Group (Multiple)", ChoiceGroup.MULTIPLE,

multiple, image);

this.append(this.chgMultiple);

 

this.addCommand(back);

this.setCommandListener(this);

}

 

 

public void commandAction(Command c, Displayable s)

{

if (c == back)

{

Lab8MIDlet.getInstance().display.setCurrent(Lab8MIDlet.getInstance().main);

}

}

};

 

Запустивши дану програму на виконання отримаємо наступне вікно:

Виберіть перший рядок та натисніть кнопку “Select” – з’явиться наступне вікно:   В цьому вікні можна бачити ChoiceGroup обох типів.  

 

 

Завдання

1. Виконайте всі приклади.

2. В прикладі 1 змініть назву екрану та рядок котрий додається до форми. Для цього змініть наступні рядки коду:
form = new Form("Hello, World");

form.append("My first MIDlet");

3. Здати звіт. Оформити звіт. У звіті повинно бути текст програми і скріншоти результатів.

4. Прикріпити до VNS файл [Ваша Фамілія].zip в архіві повинно бути файли програм [Ваша Фамілія]_labN_k.class ,a також файли звіту [Ваша Фамілія]_Zvit_LabN.mdb, де N – номер лабораторної роботи, k – номер програми.

Контрольні питання

1. Який об'єкт показує повідомлення для користувача (аналог JoptionPane в бібліотеці Swing)?

2. Які стандартні пакети, котрі включає CLDC, вводу/виводу Java, підмножина пакету J2SE?

3. Який базовий клас для написання програм, котрим необхідно безпосередньо малювати на екрані?

4. Що репрезентує інформацію про подію та її пріоритет?

5. Графічний компонент, котрий використовується найчастіше. Показує список елементів, один або декілька із яких можуть бути вибраними, аналог класу ChoiceGroup?

6. Який об'єкт дозволяє додавати стрічку до Form?

7. Компонент, котрий дозволяє редагувати дату та час?

8. Компонент, аналогічний до TextBox, але містить тільки один рядок і може бути доданим до Form?


 

 


 

СПИСОК РЕКОМЕНДОВАНОЇ ЛІТЕРАТУРИ

 

1. Системы управления базами данных и знаний: Справ. изд. / А.Н. Наумов, А.М. Вендров, В.К. Иванов и др.; Под ред. А.Н. Наумова. – М.: Финансы и статика, 1991.-352 с.

2. Обработка данных с помощью компьютера: Учеб. Пособие / Е.И. Машбиц, Г.А.Балл, И.А. Белогов и др.; Под общ. Ред. А.А. Стогния и др.-К.: Выща шк., 1997 -258 с.

3. Основы реляционных баз данных Райордан Р.Р /Пер, с англ. — М.: Изда-тельско-торговый дом Русская Редакция, 2001. — 384 с.: ил. ISBN 5-7502-0150-3

4. SQL в примерах и задачах: Астахова И.Ф. Учеб. пособие / И.Ф. Астахова, А.П. Толстобров,В.М. Мельников.— Мн.: Новое знание, 2002. — 176 с.

5. Философия Java. Библиотека программиста 3-e издания. / Брюс Еккель. – СПб.: Питер, 2003. – 971 с.: ил.

 

РЕСУРСИ

http://www.javaportal.ru - багато прикладів Java – ігор та статей. Обговорення різних проблем на форумі;

http://java.minisite.ru - книжко по Java 2ME на російській мові;

http://java2me-you.narod.ru - можна завантажити готові Java ігри, програми, почитати по Java2ME, та скачати емулятори;

http://java.sun.com/ - офіційний сайт SUN Java;


 

Підписано до друка 30.06.2009 Папір офсетний. Друк офсетний.

Умов.-друк. арк. 0,38. Формат 60х84 1/16. Наклад 15

 





Последнее изменение этой страницы: 2016-04-26; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.238.70.175 (0.028 с.)