一、序言
手持設備的用戶接口編程不同于桌面微機編程。例如,手持設備的顯示尺寸要小,顯示設備并不總是包括點擊工具如鼠標和筆。由于這些原因,在手持設備的GUI編程時,我們不可能遵循與臺式微機編程GUI同樣的規則。
CLDC本身并沒有定義任何的GUI功能。代之的是,J2ME的官方GUI類用象MIDP這樣的輪廓文件所描述,并由java社團組織定義。你可能注重到在MIDP中描述的GUI類不是基于AWT的,這似乎存在很大問題。請往下看。
二、為什么不重用AWT?
經過相當的考慮之后,MIDP專家組決定不再重用已有的AWT和Swing類。原因如下:
·AWT是為桌面微機開發的,并為這種情形作了優化處理。
·AWT設定了某些用戶交互模式。AWT的組成當中考慮到了如鼠標等的點指設備,但是許多手持設備,如手機等,只有鍵盤用于輸入。
·AWT具豐富的特性,包括在手持設備上還不能實現的。例如,AWT為窗口治理提供廣泛支持,如窗口大小與重疊調用。然而,有限的手持設備的顯示空間,使得它上面的窗口調整根本不可能實現。所以,手持設備是用不到AWT的窗口布局治理器的。
·當用戶與基于AWT的應用程序交互時,甚至對象是動態創建的。這些對象僅在與之相關的事件被應用程序或系統處理時--此時,這些對象對于垃圾回收器來說是有效的--這些對象才存在。但是手持設備有限的CPU和內存無法承擔如此重任。
三、MIDP GUI API
基于以上原因,MIDP創建了它自己的簡短的GUI,其與AWT存在相當的不同。MIDP GUI包含了低級的和高級的API兩類,這兩類Aip各有自己的事件集。本文將討論并演示通過這兩類API來使用對象的例子。通過API操縱事件在下一章中介紹。
高級的API主要應用在移動設備開發非凡注重移植性的情況下。為了保證可移植性,API進行了高級抽象,因此給予用戶在控件的外觀和感覺上極少的控制。例如,你沒法定義一個高級組件的可視化外觀(外形,顏色或者字體)。大多數與組件的交互由系統實現體所封裝;應用程序不必在乎它們。因此,底層的實現上為適應于硬件和本機用戶接口風格作了必要的調整。實現了高層API的類全部繼續自javax.microedition.lcdui.Screen類。
而低層API作了很少的抽象處理。該設計用于要求對圖形元素進行精確控制的場所,這時應用程序還可以對低層輸入事件進行存取。這一類API使得應用程序可以對在屏幕上顯示的內容進行精確的控制。javax.microedition.lcdui.Canvas和javax.microedition.lcdui.Graphics類實現該低層API。但是,應該明確指出,無法保證存取低層API的MIDlets程序是可移植的,因為這種API提供了存取特定設備的細節操作。
1、MIDP GUI模型
下面是MIDP GUI在內核上如何工作的一個模型。為在某MIDP設備上進行顯示,你需要取得該設備的display,這是由javax.microedition.lcdui.Display類來描述的。類Display是唯一的顯示治理器,當用于每一個活動的MIDlet時被實例化,并提供方法以檢索有關該設備顯示能力的信息。
獲取設備的顯示信息是很輕易的。但是,對象本身并不令人感愛好。而更令人感愛好的抽象是screen,它封裝和組織圖形對象并協調通過設備的用戶輸入。Screen由javax.microedition.lcdui.Screen對象來描述并由Display 對象調用setCurrent( )方法顯示。一個應用程序中可有多個screen,但是在某一時刻只有一個screen在屏幕上是可見的(當前的這一個),用戶只能遍歷在這一個screen上的項。圖1顯示了在display與它的可能的多個screen之間的一對多的關系。

圖1.display與screens間的關系
新聞熱點
疑難解答