日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

J2ME編程實踐之屏幕導航_JSP教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:J2ME手機開發(fā)的部分問題解答
一、在J2ME中獲得手機IMEI的方法 IMEI是Internation mobile entity identification的簡稱,在手機中輸入*#06#可以顯示該數字,長度為15位,全球唯一,永遠不會沖突,所以可以作為識

除了游戲程序,在通常的MIDP應用程序中,通常會有很多個Screen或Canvas,這些屏幕一般靠命令來實現切換,比如用戶點擊“Next”應該跳到下一屏,點擊“Back”應該返回到上一屏。當屏幕數量相當可觀時,如何在各個屏幕之間導航就值得好好考慮了。

經典的MVC模式可用于屏幕導航,Model用于存儲應用程序數據,而View則是各個Displayable對象,Controller需要單獨的一個類實現。由于MIDlet類本身在生命周期內就只有一個實例,因此MIDlet類就非常適合作為Controller。SUN在blueprints示例程序SmartTicket中應用了非常復雜的MVC,完全可以滿足MIDP應用程序的導航需要,但是可以看出,缺點是很明顯的:

一是每一個事件都需要一個唯一標識,switch-case語句會隨著屏幕的增加而增加,Controller變得難以維護。二是Controller引用了所有的View,這些View在程序啟動時就被初始化導致很大的內存開銷,而不管它們是否會被顯示。三是大量的Model對象以及異常處理都使得整個應用程序的邏輯大大復雜。

實際上,MIDP應用程序的很多屏幕并不需要復雜的Controller和Model,我們的目標是滿足基本的靈活性的同時保持結構簡單。因此,另外兩種導航方法是用二叉樹和堆棧實現,這里我們只討論用堆棧實現的MIDP導航框架,其基本思想是:每當前進到下一個屏幕時,先將下一個屏幕壓棧,然后再顯示;當返回到上一個屏幕時,先從堆棧中彈出當前屏幕,再從堆棧中取出上一個屏幕并顯示。因此,每個屏幕只需要指定要顯示的下一個屏幕,而不需記住上一個屏幕。這種堆棧導航模型特別適合有規(guī)律的“前進”、“后退”屏幕。

由于MIDlet類運行期只有一個實例,因此,使用MIDlet類作為控制器相當合適。此外,我們在一個靜態(tài)變量中保存了MIDlet實例,使得訪問MIDlet更加方便:

public class ControllerMIDlet extends MIDlet {

private static ControllerMIDlet instance = null;

private Display display = null;

private Stack ui = new Stack();

public ControllerMIDlet() { instance = this; }

protected void startApp() {}

protected void pauseApp() {}

protected void destroyApp(boolean unconditional) {}

public static void goBack() {

instance.ui.pop();

Object obj = instance.ui.peek();

instance.display.setCurrent((Displayable)obj);

}

public static void forward(Displayable next) {

instance.ui.push(next);

instance.display.setCurrent(next);

}

}

讓我們更詳細地研究一下實際的應用程序可能出現的幾種屏幕跳轉情況。最簡單的情況是,從一個屏幕前進到另一個屏幕,且返回時仍回到原先的屏幕,這種情況完全符合堆棧的FIFO特點,可以直接調用ControllerMIDlet的forward和goBack方法即可。例如,要顯示一個幫助屏幕:

J2ME編程實踐之屏幕導航(圖一)

對于一個聯網的應用程序,另一種情況是有一個暫時的等待屏幕。下面是一個在線瀏覽圖片的屏幕:

J2ME編程實踐之屏幕導航(圖二)

與上面的情況所不同的是,如果用戶在屏幕3選擇“返回”,則應當回到屏幕1而不是屏幕2,因此,對于屏幕2到屏幕3的切換,就不能forward,我們使用replace,拋棄屏幕2,從而實現屏幕3直接可以goBack到屏幕1:

public static void replace(Displayable next) {

instance.ui.pop();

instance.ui.push(next);

instance.display.setCurrent(next);

}

堆棧的變化如下:

J2ME編程實踐之屏幕導航(圖三)

對于某些更為復雜的情況,例如,登錄過程,如果允許用戶選擇自動登錄,則屏幕跳轉如下:

J2ME編程實踐之屏幕導航(圖四)

如果用戶不選擇自動登錄,則屏幕跳轉如下:

J2ME編程實踐之屏幕導航(圖五)

對于這種情況,解決方案是,即使用戶選擇了自動登錄,LoginUI屏幕也要被壓入堆棧中,但是不顯示出來,因此,我們定義了另一個forward(Displayable d1, Displayable d2)方法,它將d1和d2依次壓入堆棧,但只顯示d2。在返回時,如果用戶取消,則返回到LoginUI�?傊�,通過定義多個導航方法,就可以實現各種操作。

這種基于堆棧的導航模型非常適用于有規(guī)律的“前進”,“后退”屏幕,而且只在需要的時候生成新的屏幕。無需關心屏幕狀態(tài),因為返回時上一個屏幕的狀態(tài)被完整地保存在堆棧中。

堆棧模型的缺點是數據由不同的屏幕處理,對于一些流程而言,可能需要將每個屏幕的數據依次傳遞給下一個屏幕,越往后的屏幕其構造方法的參數可能也越多。

對于聯網操作等涉及到多線程等待屏幕的情況,我們將在后面給出一個完整的解決方案,并集成到堆棧導航框架中,使應用程序本身完全不用涉及到多線程聯網操作,只需專注于自身邏輯。

  

分享:在J2ME手機程序開發(fā)中使用顏色
在J2ME手機開發(fā)過程中,需要經常用到顏色來進行繪制,增強程序的表現效果,下面就介紹一下如何使用顏色。 由于J2ME技術比較簡單,所以沒有實現專門的顏色類,而只是使用RGB的概念來

來源:模板無憂//所屬分類:JSP教程/更新時間:2008-08-22
相關JSP教程