
- •Лабораторна робота №5 (Java. Типи даних.)
- •План роботи
- •Теоретичні відомості
- •Більш складні типи даних – масиви.
- •Оператори керування кодом програми. Оператори if, if-else.
- •Оператори switch.
- •Порядок виконання роботи
- •Інтерфейси колекцій
- •Інтерфейс Collection.
- •Інтерфейс List.
- •Інтерфейс Set.
- •Класи колекцій
- •Клас ArrayList.
- •Клас HashSet.
- •Клас TreeSet.
- •Колекції класів, визначених програмістом.
- •Порядок виконання роботи
- •Контрольні питання
- •Завдання властивостей компонентів.
- •Обробка подій.
- •Порядок виконання роботи
- •Контрольні питання
- •Лабораторна робота №8 (Пакет Swing – компонувальники (LayoutManager))
- •План роботи
- •Теоретичні відомості
- •Компоновульник FlowLayout.
- •Компонувальник BorderLayout
- •Компонувальник CardLayout.
- •Компонувальник BoxLayout.
- •Компонувальник GridLayout
- •Порядок виконання роботи
- •Контрольні питання
- •Лабораторна робота №9 (Створення простого текстового редактора.)
- •План роботи
- •Теоретичні відомості
- •Порядок виконання роботи.
- •Контрольні питання
- •Порядок виконання роботи
- •Контрольні питання
- •Лабораторна робота №11 (Основні компоненти j2me)
- •Теоретичні відомості
- •Компоненти графічного інтерфейсу користувача midp. (пакет javax.Microedition.Lcdui)
- •Програмна структура mid-лета.
- •Завдання
- •Контрольні питання
- •Список рекомендованої літератури
- •Ресурси
Компоненти графічного інтерфейсу користувача 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 обох типів.
|