Модераторы: javastic, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Display, Displayable и CommandListener взаимосвязи 
:(
    Опции темы
John2
Дата 23.5.2012, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 30.6.2009

Репутация: нет
Всего: нет



Суть такая:
Есть основной класс от MIDlet 
Код

public class MyMidlet extends MIDlet implements CommandListener {
public Form formMidlet;
private Display mydisplay;

}

В нём происходит обработка команд

 в другом классе наследуемом от Form 
Код

public class MyForm extends Form implements CommandListener {
/** команда выхода из формы MyForm программы в объект Form, созданный в основном классе мидлет */
    public Command backToApp;

public void commandAction(Command c, Displayable d) {
        if (c == backToApp)  {
                 // необходимо вернуться в  formMidlet определённый в основном классе мидлета
        }
}

Тоже  обрабатываются команды

Как видно со второго фрагмента кода необходимо вернуться в  formMidlet. Если я правильно понимаю, то необходимо каким-то образом передать ссылку на объект Displayable, используемый в основном классе мидлета. Как это сделать, ума не приложу.
И вообще трудно понять как между собой связаны в этом случае объекты Display, Displayable и CommandListener.
Может кто-то на примере разъяснит, буду очень благодарен.

Это сообщение отредактировал(а) John2 - 23.5.2012, 18:21
PM MAIL   Вверх
Kalisnik
Дата 24.5.2012, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 21.6.2011

Репутация: нет
Всего: нет



Цитата(John2 @  23.5.2012,  18:20 Найти цитируемый пост)
И вообще трудно понять как между собой связаны в этом случае объекты Display, Displayable и CommandListener.


Display - объект, который показывает другие объекты на дисплее.
Displayable - это "другие объекты", которые показывает объект Display.
CommandListener - "слушатель", прикрепленный к показываемому объекту Displayable. Он сканирует нажатия софт-клавишь мобильного устройства и в случае нажатия вызывает метод commandAction.

Код

public class MyMidlet extends MIDlet implements CommandListener {
    
    private Form formMidlet;
    private Display mydisplay;
    private MyForm myform;
    
    public Form getMyForm(){
        return formMidlet;
    }
    
    public Display getMydisplay(){
        return mydisplay;
    }

    public void startApp() {
        formMidlet = new Form("Форма мидлета");
        formMidlet.append("Некое содержание мидлета");
        myform = new MyForm(this);
        mydisplay = Display.getDisplay(this);
        mydisplay.setCurrent(myform);
    }
    
    public void pauseApp() {
    }
    
    public void destroyApp(boolean unconditional) {
    }

    public void commandAction(Command c, Displayable d) {
        
    }
}



Код

public class MyForm extends Form implements CommandListener {
    
    private Command backToApp;
    private MyMidlet midlet;
    
    MyForm(MyMidlet midl){
        super("Форма 2");
        this.append("Некое содержание формы 2");
        midlet = midl;
        backToApp = new Command("Назад", Command.BACK, 0);
        this.addCommand(backToApp);
        this.setCommandListener(this);
    }
    
    public void commandAction(Command c, Displayable d) {
        if (c == backToApp)  {
            midlet.getMydisplay().setCurrent(midlet.getMyForm());
        }
    }
}

PM MAIL   Вверх
John2
Дата 6.6.2012, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 30.6.2009

Репутация: нет
Всего: нет



Kalisnik, спасибо, что помогли разобраться!
Получилось примерно следующее:
Код

public class MyMidlet extends MIDlet implements CommandListener  {
    private Form formMidlet;
    private Display mydisplay;
    private MyForm myForm;
    private Command gotoMyForm;
      
    public void startApp() {
        formMidlet = new Form("Форма мидлета");
        formMidlet.append("Некое содержание мидлета");
        gotoMyForm = new Command("gotoMyForm", Command.SCREEN, 0);
        formMidlet.addCommand(gotoMyForm);
        mydisplay = Display.getDisplay(this);
        formMidlet.setCommandListener(this);
        mydisplay.setCurrent(formMidlet);
    }    
    public void pauseApp() {    }    
    public void destroyApp(boolean unconditional) {    }
    public void commandAction(Command c, Displayable d) {
        if ( c == gotoMyForm ) {            
             myForm = new MyForm(this, formMidlet);
            mydisplay.setCurrent(myForm);            
        }
    }
}


Код

public class MyForm extends Form implements CommandListener {
    /** команда выхода из формы MyForm программы в объект Form, созданный в основном классе мидлет */ 
    public Command backToApp;
    private MIDlet midlet;
    private Display display;
    private Form formMidlet;

    public MyForm( MIDlet midlet, Form formMidlet ) {
        super("Form 2");        
        this.append("Некое содержание формы 2");
        this.midlet = midlet;
        this.formMidlet = formMidlet;
        display =  Display.getDisplay(midlet);
        backToApp = new Command("Back", Command.BACK, 0);
        this.addCommand(backToApp);
        this.setCommandListener(this);
        display.setCurrent(this);        
    }   

    public void commandAction(Command c, Displayable d) {
        if ( c == backToApp ) {
            // необходимо вернуться в  formMidlet определённый в основном классе мидлета    
            display.setCurrent(formMidlet);            
        }
    }    
}


От методов getMyForm() и getMydisplay() пришлось отказаться, поскольку о классе MyForm речь идёт как о библиотечном классе, который будет использоваться в разных мидлетах. 
Но тут возникает вопрос, пока для меня не принципиальный, но всё же интересный, чтобы можно было глубже понять. 
Что если я захочу по команде backToApp возвращаться не к объекту Form, а к примеру Alert. Можно ли ипользовать какой-либо универсальный способ, который подходил бы и к Form и к Alert или Canvas?
PM MAIL   Вверх
Kalisnik
Дата 6.6.2012, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 21.6.2011

Репутация: нет
Всего: нет



Цитата(John2 @  6.6.2012,  17:14 Найти цитируемый пост)
Можно ли ипользовать какой-либо универсальный способ, который подходил бы и к Form и к Alert или Canvas? 


Нет ни чего невозможного. Например, можно такое реализовать по средством стека.

Создаем стек и при переходе на другой объект Displayable, показываемый в настоящее время объект Displayable закидываем в стек. Если же нужно вернуться на предыдущее окно, то просто обратно достаем объект Displayable из стека и показываем его на дисплей.

Почитайте в этой http://forum.vingrad.ru/forum/topic-344719.html темке - в ней я задавался похожими вопросами. smile Там и пример со стеком есть. 

P.S. И не важно Alert это или Form, или Canvas. Ибо все они Displayable.

Это сообщение отредактировал(а) Kalisnik - 6.6.2012, 21:04
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.1104 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.