Контакты

Для связи с нами можно использовать:
irc://irc.chatnet.ru:#gfs
icq://546460
email://cobalt[@]gfs-team.ru

Все материалы предоставлены только с ознакомительной целью
ГлавнаяСтатьиКодингПишем программы под телефоны на Java. Часть III
© Guru 14.04.2007

Продолжаем бороздить просторы J2ME. В этой статье, я собираюсь помочь Вам разобраться с некоторыми моментами нашей программы, внести новые поправки в эту же программу, а также сделать ещё что-нибудь полезное для Вас (: Прежде чем приступать, хочу предупредить. В своей первой статье, я рекомендовал для чтения книгу про написание приложений под телефоны. Так вот - забейте на эту книгу, ничего хуже, в плане примеров которые есть в этой книге, быть не может. В плане теории, можно вычитать пару моментов. Хотя можно и вообще обойтись без книги. Приступим…

Сначала про некоторые моменты в нашей программе. Откройте наш проект и обратите Ваше внимание на строку:

  private Display DISPLAY = Display.getDisplay(this);

Удалите её. Теперь корректируем наш метод startApp()

public void startApp() {
        StringItem si = new StringItem("Some label","Some text");
        FORM.append(si);
        Display.getDisplay(this).setCurrent(FORM);
    }

Как видно из кода, я убрал вывод рисунка на форму (ну пока обойдемся без картинок). Так же мы избавились от лишней переменной и строчки, воспользовавшись нашими знаниями по ООП. Метод getDisplay возвращает Display, это означает что мы можем воспользоваться этим и сразу задать этому дисплею нашу форму. Есть ещё много нюансов в методах программирования, написания кода, но скорее Вы познаете их сами или же увидите в следующих статьях.

Что нового я бы хотел показать? Хочу рассказать Вам про команды. Команды, что это такое? В каждом телефоне, каждое приложение имеет возможность предоставления интерфейса стандартных команд (игры не в счёт, там в основном используются свои меню, команды). Команды отображаются в низу дисплея. Над левой и правой функциональной клавишами телефона соответственно. К примеру программа выполняет некоторое действие "выход" при нажатии на правую функциональную клавишу, и подтверждает некоторое действие при нажатии на левую функциональную кнопку (на пример "ok"). Думаю хоть что то из выше написанного вы осмыслили. Если совсем не понятно, перейдем к примеру.

Мы хотим, что бы при нажатии на левую кнопку на телефоне, приложение закрывалось, и при нажатии на правую на дисплей выводилась случайная картинка. Прежде чем приступить, отмечу следующее: возможно приложение на эмуляторе не будет закрываться при вызове метода destroyApp - это нормально, на телефоне все будет работать. Возможно вы увидите в коде не верные пути к изображениям - это зависит от того, какая структура у приложения (у меня изображения будут находиться не в "/res/", а в корне). В этот раз я выложу сразу весь листинг программы, а потом разберем все необходимое.

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.util.Random;
import java.io.IOException;

public class myApp extends MIDlet implements CommandListener{
    private Random rand = new Random();
    private Form FORM = new Form("MainForm");
    private String img_names[] = new String[]{"/img1.jpg","/img2.jpg","/img3.jpg"};
    private Image img_srcs[] = new Image[img_names.length];
    private Command EXIT = new Command("Exit",Command.EXIT,1);
    private Command RAND = new Command("Picture",Command.OK,1);

    public myApp(){
        try{
            for (int i=0; i<img_names.length; i++)
                img_srcs[i] = Image.createImage(img_names[i]);
        }catch (IOException ioe){
            img_srcs = null;
            System.out.println("Error while image load");
        }
        FORM.append(img_srcs[rand.nextInt(img_srcs.length)]);
        FORM.addCommand(EXIT);
        FORM.addCommand(RAND);
        FORM.setCommandListener(this);
    }

    public void startApp(){
        Display.getDisplay(this).setCurrent(FORM);
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
    }

    public void commandAction(Command CMD, Displayable DISP){
        if (CMD == EXIT){
            System.out.println("Exit ... ok");
            destroyApp(true);
        }else{
            FORM.deleteAll();
            FORM.append(img_srcs[rand.nextInt(img_srcs.length)]);
        }
    }
}

Итак, начнем с новенького. При объявлении класса видим - implements CommandListener. Слово implements означает что мы будем использовать интерфейс в нашем классе. Интерфейс представляет из себя некий абстрактный класс, который предоставляет классу, который использует его некоторые методы, а так же методы, которые выполняются при некоторых воздействиях с определённой стороны. В нашем случае это CommandListener, который предоставляет абстрактный метод commandAction. Метод commandAction вызывается при нажатии на клавише в телефоне. Для того, что бы нажатия на клавиши отслеживались приложением (а конкретней нашей формой), необходимо задать объекту, который имеет возможность задавать и воспроизводить команды текущий CommandListener. Единственный наш элемент, который имеет команды - наша форма. Соответственно у формы есть метод, который устанавливает активный CommandListener. Этот метод называется setCommandListener. Как говорилось ранее, форма имеет команды. Команды это обычные объекты типа Command. Добавляются на форму почти таким же способом, как и листенер - addCommand.

Конструктор, конструктор, открой личико. Что мы видим в конструкторе? В цикле мы заполняем массив картинок, как не удивительно - картинками. Это необходимо для быстрой загрузки картинок, при нажатии на клавишу. Далее с помощью метода формы append добавляем случайную картинку на форму. Ну и в конце концов, добавляем команды и устанавливаем активный листенер.

Дальше все как обычно - отображаем нашу форму с изображением на дисплей и играемся. На дисплее появились две команды (кнопки). Одна называется "Exit", другая "Picture". Действия которые будут происходить по нажатии на кнопки определяются в нашем переписанном методе commandAction. В метод передаются два параметра - первый команда, которая была нажата, второй объект, который имеет свойство отображаться (в нашем случае - форма). Для того что бы выполнить выход из программы при нажатии на кнопку "Exit" мы проверяем первый параметр на совпадение с нашей переменной (командой) EXIT. Думаю, что делает вторая команда Вам понятно.

Подведем итоги.

В этой статье Вы научились пользоваться клавишами на телефоне. Понажимав на некоторые наша программа выполнила хоть и некоторые, но все таки действия. И ещё раз повторюсь - попробуйте поиграть с объектами такого же типа, как и StringItem, к примеру DateField, Gauge. Если разберетесь сами, я буду только рад. В противном случае - у меня найдется для Вас статья (:




© Guru 14.04.2007

e-Commerce Partners Network
Ник:

Текст:
P Br B I Qute



Код: обновить
Последние комментарии
26.06.2017 07:33:17 DeweyAloma написал:
If you have a desire to learn how to earn from...
XSS Часть II
26.06.2017 07:09:03 DeweyAloma написал:
If you have a desire to learn how to earn from...
Взлом приложений WEB 2.0 из Firefox
26.06.2017 04:42:47 DeweyAloma написал:
If you have a desire to learn how to earn from...
HTTP. Описание протокола
Реклама

Тут должна была быть ваша реклама, но мы потеряли глиняную табличку с ее текстом. SapeId: 665044

Rambler's Top100