Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java ME (J2ME) > Canvas и Form


Автор: prog2 21.5.2008, 22:17
Как переключать дисплеи с канваса на форму и обратно. Пока получается только с канваса на форму, а как затем обратно вернуть тот канвас, что был до этого? 


Автор: hamsterKSU 22.5.2008, 00:53
его надо запомнить где-то smile  например в поле Form backScreen в твоем классе реализующем Canvas

Автор: Semplar 10.6.2008, 21:11
Можно как угодно, всё зависит от реализации.
Значит, если тебе нужна автоматически переключаемая форма, то надо создать новый класс с теми самими свойствами, что и у класса Form (надо создать дочерний класс) с дополнительными параметрами.
Код

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

// мидлет
public class Midlet extends MIDlet impements Runnable
{
    Form form;
    Canvas canvas;

    public void startApp()
    {
        // создаем самопереключающеюся форму
        form = new AutoForm("MyForm", Display.getDisplay(this), canvas);
        // самопереключающийся канвас
        canvas = new AutoCanvas(form);
        Display.getDisplay(this).setCurrent(form);
    }

    public void pauseApp()
    {
    }

    public void destroyApp(boolean unconditional)
    {
        notifyDestroyed();
    }

    // чтобы вырубить мидлет
    public void run()
    {
        destroyApp(false);
    }
}

class AutoForm extends Form implements CommandListener
{
    Display display;
    Displayable displayable;

    public AutoForm(String title, Display d, Displayable disp)
    {
        super(title);
        /* запоминаем параметры,
          построение формы */
    }

    public void commandAction(Command command,  Displayable displayable)
    {
        // при определённом действии переключаемся на канвас
        /* условие... */ display.setCurrent(displayable);
    }
}

class AutoCanvas extends Canvas
{
    /* почти то же, но в обратную сторону
      и стосовно канваса */
}

Извините, просто долго писать подробности. Ну, думаю, в общих чертах понятно smile .

Автор: Dummy 10.6.2008, 22:11
Можно и так, если захочетсяsmile  Только поправочка. Для конкретного случая вот здесь вот:

Код

form = new AutoForm("MyForm", Display.getDisplay(this), canvas);


canvas еще не инициализирован ничем реальным, т. е. он null. Так что для таких взаимных ссылок придется добавлять хотя бы в AutoForm что-то вроде setPreviousDisplayable() для выставления поля displayable и поправить код:
Код

// создаем самопереключающеюся форму
form = new AutoForm("MyForm", Display.getDisplay(this), canvas);
// самопереключающийся канвас
canvas = new AutoCanvas(form);
form.setDisplayable(canvas);
Display.getDisplay(this).setCurrent(form);


Автор: LeMoH 20.8.2008, 01:17
всё, разобрался

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)