圖形用戶界面編程在程序開發中非常重要,因為這是程序和用戶之間交互的橋梁。很難想象一個應用程序沒有用戶界面。在J2SE中我們可以通過AWT/Swing開發圖形用戶界面,也可以使用近期備受關注的SWT。在J2ME專家組織定MIDP中的圖形用戶界面的時候,考慮到設備的性能比較有限,AWT/Swing主要是針對桌面應用程序而設計的原因,最終沒有采用AWT/Swing作為MIDP的圖形用戶界面庫。而重新設計了小巧的javax.microedition.lcdui包。本章將主要講述MIDP圖形用戶界面的體系結構,并對各個類的作用和使用作簡單的介紹。
本文將按照MIDP2.0的規范進行介紹,我們必須清楚地知道在MIDP圖形用戶界面中是有低級圖形用戶界面和高級圖形用戶界面分別的。同樣事件處理機制也有高低之分。
首先我們通過圖表來展示一下MIDP2.0中圖形用戶界面的體系結構
從結構中我們可以看到,Displayable是所有用戶界面組件的超類。從Displayable中分出兩個分支一個是Screen,另一個是Canvas。前者是高級圖形用戶界面的超類,后者是低級圖形用戶界面的超類。首先我們來看高級圖形用戶界面,Screen的四個子類分別是TextBox,List,Alert和Form。其中前面三個是預定義類型的組件,他們的內容基本定義好了,比如TextBox就是多行的輸入框。而最后一個Form類是開放類型的,也可以成為容器類型。Form是負責管理Item的(Item后面我們會談到),Form根據Item的信息對他們進行布局等規劃。下面我們分別來描述一下這四個高級圖形用戶界面組件的功能
TextBox是提供給用戶輸入多行數據的組件,我們也可以對用戶的輸入進行類型的限制。構造器如下TextBox(String title, String text, int maxSize, int constraints)
List是提供給用戶選擇選項的組件,List實現了Choice接口。通常它可用做制作菜單和列表式信息如電話本。構造器如下
List(String title, int listType)
List(String title, int listType, String[] stringElements, Image[] imageElements)
Alert則是用來在一段時間內顯示信息給用戶看,也可以作為確認框使用。構造器如下
Alert(String title)
Alert(String title, String alertText, Image alertImage, AlertType alertType)
Form作為容器類,是通過在其中添加相應的Item來收集用戶輸入信息的,比如添加TextField。構造器如下
Form(String title)
Form(String title, Item[] items)
最后我們必須要介紹的一個類就是Display,它是設備屏幕的代表,在我們的程序中只有一個Display的引用,通過方法Display.getDisplay(MIDlet midlet)得到。通過它我們得到當前設備屏幕的一些信息,比如色彩之類,但是最重要的是我們通過Display的setCurrent()方法來展現給用戶不同的屏幕。
下面我們必須介紹的是Item類,它是所有能夠被添加到Form容器上的組件的父類,我們來看看Item的繼承結構圖
在MIDP2.0中,Item的子類共有8個,他們的功能各不相同,這里不再進行一一的介紹了。只對其中比較常用的類進行簡單講解。TextField類是我們經常使用的,它只能提供單行的輸入。DateField類提供給用戶輸入日期的功能,ChoicGroup同樣是實現了Choice接口,我們可以通過模式來把它用作單選和多選。CustomItem是在MIDP2.0中提供給用戶的,其實它是介于高級和低級之間的用戶界面,我們可以把它叫做增強型圖形用戶界面,因為它可以添加到Form中,且可以通過實現一系列的抽象方法來繪制自己。比如你可以實現一個表格組件。
Canvas類是所有低級用戶組件的父類,我們通過實現Canvas類的paint(Graphics g)方法來繪制屏幕,主要是使用Graphics類提供的各種方法。在MIDP2.0中提供了一個GameCanvas類,是專門為游戲開發設計的。關于Canvas類可以說的很詳細,但是這里只是為了介紹體系結構所以不再多說了。
接下來我們來看看MIDP圖形用戶界面中的事件處理機制,在高級圖形用戶界面中我們必須了解的是三個Listener和一個Command,其中的原理就是回調機制,回調在圖形界面編程中廣泛采用,它的原理就是底層函數調用高層函數,在java中我們定義一個接口,比如CommandListener,接口中定義一個方法比如commandAction(Command cmd,Displayable displayable)。當用戶觸發事件發生的時候,比如用戶按下了一個Command,那么定義在CommandListener中的commandAction()方法會被調用,來處理相關的操作。其他兩個Listener,ItemStateListener和ItemCommandListener的原理和CommandListener的原理一樣不再多說。使用高級事件處理的時候,我們遵循的步驟就是,實現接口-注冊監聽器。
低級事件處理比較復雜,需要我們判斷用戶的輸入來進行相應的處理。針對鍵盤事件,如下三個方法用來接收用戶的輸入
keyPRessed(int keyCode)
keyReleased(int keyCode)
keyRepeated(int keyCode)
針對觸摸屏事件,我們可以通過如下方法來接受用戶輸入事件。
pointerDragged(int x, int y)
pointerPressed(int x, int y)
pointerReleased(int x, int y)
關于低級事件的更多介紹,請參考本站的其他文章,這里不再講解。
總結:本文并非針對某一問題進行詳細的分析,而是通過對體系結構的介紹讓大家從總體上把握MIDP的圖形用戶界面。其實我們的學習就是在頭腦中對外界知識進行整理和消化的過程,經常有意識的去總結和抽象對學習是很有幫助的。
(出處:http://www.survivalescaperooms.com)
新聞熱點
疑難解答