Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Zbirnuk_lab_po_kursy_intTexTaSybd.doc
Скачиваний:
8
Добавлен:
08.12.2018
Размер:
754.18 Кб
Скачать

Компоненти графічного інтерфейсу користувача midp. (пакет javax.Microedition.Lcdui)

Графічний інтерфейс користувача MIDP базується на абстрактному класі – екран (screen). Цей об’єкт відповідає за зображення елементів інтерфейсу та ввід команд з боку користувача. MIDlет, як правило, складається із кількох об’єктів screen, тільки один із котрих може бути видимий та активний в певний момент часу.

Класи:

Alert

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

Canvas

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

ChoiceGroup

Група об’єктів, один або декілька із яких можуть бути вибраними

Command

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

DateField

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

Display

Представляє дисплей

Font

Шрифт

Form

Форма – використовується для того, щоб показати декілька компонентів

Gauge

Елемент для вимірювання у вигляді прямокутників

Graphics

Дає можливість виконувати прості операції із 2D графікою

Image

Іконка в форматі Portable Network Graphics (PNG)

List

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

StringItem

Дозволяє додавати стрічку до Form

TextBox

Екран – багаторядковий текстовий редактор

TextField

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

Ticker

Компонент – біжучий рядок

Програмна структура 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 обох типів.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]