ГлавнаяНеобходимые приложенияНастройка приложенийГлавный классВысокоуровневое программированиеКласс FormРабота с кнопками. Класс CommandКласс ItemСписок выбора. Класс ChoiceGroupПоле ввода. Класс TextFieldПоле текста. Класс StringItemСообщения. Класс AlertНизкоуровневое программированиеФайл манифестаСохранения. Работа с RecordStoreРабота с таймеромПолезные ссылкиОб автореСайт ФПМиКТСтуденческий сайт
Сайт о Java ME

Высокоуровневое программирование. Класс Command.

Работа в высокоуровневых компонентах

Пример Для того, чтобы осуществлять переходы между экранами и другие действия, например, выход из приложения, необходимо создать кнопку. Кнопки будут отображаться внизу экрана. Нажатие на них производится посредством либо нажатия на экран (если телефон сенсорный), либо нажатием на соответствующую функциональную клавишу (обычно расположены сверху слева и сверху справа), а также, на некоторые другие клавиши. Также кнопки могут нажиматься из какого-нибудь компонента, например, StringItem.

Для этого, реализуем интерфейс CommandListener с добавлением public метода commandAction(Command c, Displayable d).

Теперь создадим две кнопки: кнопку выхода и кнопку, которая так и будет называться - "Кнопка":
Command cmd;
Command exit;
Также создадим пустую форму
Form form=new Form("Форма");
Создади кнопки. Для этого воспользуемся конструктором
Command(String label, int commandType, int priority), где label - название кнопки, priority - приоритет кнопки, commandType - тип кнопки.
Тип кнопки может принимать несколько значений: Command.OK, Command.EXIT, Command.BACK, Command.HELP, Command.ITEM. Константа Command.ITEM используется для работы с компонентами подклассов Item, см, например, StringItem.

По сути, приоритет кнопки нужен для упорядочивания их размещения на экране, но, вне зависимости от приоритетов, на разных телефонах эти кнопки распологаются по-разному.

Создадим наши две кнопки в конструкторе класса:
cmd=new Command("Кнопка", Command.OK, 0);
exit=new Command("Выход", Command.EXIT, 1);
Теперь добавим эти кнопки на форму
form.addCommand(cmd);
form.addCommand(exit);
и установим форме обработчик нажатия
form.setCommandListener(this);
Теперь, при нажатии кнопок, будет вызываться метод commandAction(Command c, Displayable d), где в качестве параметра c передается кнопка, нажатие на которую произошло. Параметр d - объект, которому кнопка в момент вызова принадлежала (в нашем случае это будет объект form).

Сделаем теперь, чтобы при нажатии на кнопку "Кнопка" выводился какой-нибудь текст, при нажатии на кнопку "Выход" приложение закрывалось.
public void commandAction(Command c, Displayable d) {
	if(c==cmd){
		form.append("Нажата кнопка");
	}else if(c==exit){
		destroyApp(true);
		notifyDestroyed();
	}
}
Для того, чтобы все работало, необходимо переключить "внимание" мидлета на нашу форму с помощью метода display.setCurrent(form).

Вот как выглядит весь код целиком:

Файл HelloMIDlet.java

package hello;

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class HelloMIDlet extends MIDlet implements CommandListener{

    private Display display;
    Command cmd;
    Command exit;
    Form form=new Form("Форма");

    public HelloMIDlet() {
        cmd=new Command("Кнопка", Command.OK, 0);
        exit=new Command("Выход", Command.EXIT, 1);
        display=Display.getDisplay(this);
    }

    public void startApp() {
        form.addCommand(cmd);
        form.addCommand(exit);
        form.setCommandListener(this);
        display.setCurrent(form);
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
    }

    public void commandAction(Command c, Displayable d) {
        if(c==cmd){
            form.append("Нажата кнопка");
        }else if(c==exit){
            destroyApp(true);
            notifyDestroyed();
        }
    }
}
Вот собранная программа:
MobileApplication4.jad
MobileApplication4.jar

Работа с классом GameCanvas.

Пример Тут, в принципе, все также, но команды нужно добавлять к самому классу GameCanvas. Вот как это выглядит:

Файл HelloMIDlet.java

package hello;

import javax.microedition.midlet.*;

public class HelloMIDlet extends MIDlet{

    Canva canva;

    public HelloMIDlet() {
        canva=new Canva(this);
    }

    public void startApp() {
        canva.paint();
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional){
        canva=null;
    }
}

Файл Canva.java

package hello;

import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.game.GameCanvas;

public class Canva extends GameCanvas implements CommandListener{

    Display myDisplay;
    Command exit;
    HelloMIDlet midlet;

    Canva(HelloMIDlet midlet){
        super(true);
        this.midlet=midlet;
        exit=new Command("Выход", Command.EXIT, 0);
        addCommand(exit);
        setCommandListener(this);
        myDisplay=Display.getDisplay(midlet);
        myDisplay.setCurrent(this);
    }

    void paint(){
        paint(getGraphics());
        flushGraphics();
    }

    public void paint(Graphics g){
        g.setColor(250, 0, 0);
        g.fillRect(0, 0, g.getClipWidth(), g.getClipHeight());
    }

    public void commandAction(Command c, Displayable d) {
        if(c==exit){
            midlet.destroyApp(true);
            midlet.notifyDestroyed();
        }
    }
}
MobileApplication4.jad
MobileApplication4.jar
Кнопки можно сделать невидимыми. Для этого нужно перейти в полноэкранный режим вызвав метод setFullScreenMode(true). В этом случае на сенсорных телефонах на саму кнопку уже нельзя будет нажать, но если телефон позваляет нажимать на кнопку с помощью внешних элементов управления, то они будут работать.
Назад	Далее