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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> few forms 
:(
    Опции темы
DEMOVERSION
Дата 14.3.2006, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Как правильно организовать переходы между формами.
Например у меня есть 5 форм. Как переходить между ними? Например с главной перейти на вторую, с второй на третею, а с третей на 1. Даные не должны пропадать. Спасибо.
PM MAIL   Вверх
W0LF
Дата 15.3.2006, 02:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

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



я уже писал об этом
http://forum.vingrad.ru/index.php?showtopi...mp;#entry641462
Просто там с одной формы на другую и обратно, если надо с 3, 4, 5 на первую то рациональнее будет в конструктор последующей передавать параметр Displayable backToNForm;


Это сообщение отредактировал(а) W0LF - 15.3.2006, 02:51


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
redrick
Дата 15.3.2006, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 547
Регистрация: 7.1.2004
Где: Москва

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



W0LF, если честно, я не понял какая связь меджду твоим примером в том треде и вопросом.
Ты привел механизм для смены скринов(красиво, единственно - я предпочитаю без instaceof но зато с вызовом некоего init() формочки при каждом setCurrent()), однако там не видно как же при этом должно быть организовано приложение.


DEMOVERSION, ссылочку W0LF-а само собой посмотришь, но вообще
мне больше всего нравится подход из SmartTicket-а:
- заводишь мега-класс типа UIController, в нем пишешь методы, отвечающие за всевозможные события в приложении, в том числе за появление той или иной формочки
- после этого в commandAction() каждой формочки вставляешь вызовы типа UIController.showXXXMenu()
- чтобы можно было делать "back" в общем случае - можно складывать скрины в некий стек и делать из него pop() при нажатии на етот "back"


--------------------
Имею Мнение Хрен Оспоришь   
PM MAIL ICQ   Вверх
W0LF
Дата 16.3.2006, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

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



Хорошо, вот пример:
Код

public class MainMenu extends Form implements CommandListener{ 
    private Command cViewForm1 = new Command("Form1",Command.SCREEN,1);
    public Form1() {
        super("TITLE");
        addCommand(cViewForm1);
        setCommandListener(this);        
    }
    public void showNotify() {
        
        /**
         * Метод, который удаляет все компоненты с формы. Реализовать самому
        */
        deleteAll();                          
        this.setTitle(iTitle);
        ...//добавляем компоненты на форму
    }
    public void hideNotify() {
        ...
    }
    public void commandAction(Command c, Displayable s) {
            if (s == this) {
                if (c == cViewForm1){
                    Main.setDisplay(new Form1(this));
                }
            }            
    }
  





public class Form1 extends Form implements CommandListener{ 
    private Command cBack = new Command("Back",Command.BACK,1);
    private Command cViewForm2 = new Command("Form2",Command.SCREEN,1);
    private Displayable backTo;
    /**
     * Конструктор
     * @param backTo возврат на предыдущую форму(в данном случае MainMEnu)
    */
    public Form1(Displayable backTo) {
        super("TITLE");  
        this.backTo = backTo;
        addCommand(cBack);
        addCommand(cViewForm2);
        setCommandListener(this);        
    }
    public void showNotify() {
        
        /**
         * Метод, который удаляет все компоненты с формы. Реализовать самому
        */
        deleteAll();                          
        this.setTitle(iTitle);
        ...//добавляем компоненты на форму
    }
    public void hideNotify() {
        ...
    }
    public void commandAction(Command c, Displayable s) {
            if (s == this) {
                if  (c == cBack) {
                    Main.setDisplay(backTo);
                }
                if (c == cViewForm2){
                    Main.setDisplay(new Form2(this,backTo));
                }
            }            
    }
  



public class Form2 extends Form implements CommandListener{ 
    private Command cBack = new Command("Back",Command.BACK,1);
    private Command cBackToMain = new Command("MainMenu",Command.SCREEN,1);
    private Displayable backTo;
    private Displayable backToMain;
    /**
     * Конструктор
     * @param backTo возврат на предыдущую форму(Form1)
     * @param backToMain возврат на MainMenu
    */
    public Form1(Displayable backTo, Displayable backToMain) {
        super("TITLE");
        this.backTo = backTo;
        this.backToMain = backToMain;
        addCommand(cBack);
        addCommand(cViewForm1);
        setCommandListener(this);        
    }
    public void showNotify() {
        
        /**
         * Метод, который удаляет все компоненты с формы. Реализовать самому
        */
        deleteAll();                          
        this.setTitle(iTitle);
        ...//добавляем компоненты на форму
    }
    public void hideNotify() {
        ...
    }
    public void commandAction(Command c, Displayable s) {
            if (s == this) {
                if  (c == cBack) {
                    Main.setDisplay(backTo);
                }
                if (c == cBackToMain){
                    Main.setDisplay(backToMain);
                }
            }            
    }
  


Если будешь хранить ссылки на объекты, они будут в памяти, и коллектор не съест их.
Но обычно я создавал новую и хранил ссылку на предыдущую. может это кому и не понравится...

Это сообщение отредактировал(а) W0LF - 16.3.2006, 15:40


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
javastic
Дата 17.3.2006, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1214
Регистрация: 18.3.2005
Где: St.Petersburg

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



Цитата(redrick @ 15.3.2006, 21:35)
- чтобы можно было делать "back" в общем случае - можно складывать скрины в некий стек и делать из него pop() при нажатии на етот "back"

А ещё можно сделать форму с уже встроенным Back'ом (можно в совокупности с Exit'ом) чтобы он активировал "Родителя", после чего наследовать такую форму из любой другой.



--------------------
01101010 01100001 01110110 01100001 01110011 01110100 01101001 01100011
scjp, mcp 
PM MAIL WWW ICQ   Вверх
Todd
Дата 17.3.2006, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



а почеу нельзя завести просто массив форм и устанавливать ту ,
которая нам нам нужна ?
PM MAIL   Вверх
redrick
Дата 17.3.2006, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 547
Регистрация: 7.1.2004
Где: Москва

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



Todd, а нафига ? массив все равно что куча ссылок которые ты не зануляешь - только без имен, а с индексами вместо них


--------------------
Имею Мнение Хрен Оспоришь   
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

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

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


 




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


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

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