手持移動(dòng)設(shè)備JME應(yīng)用開(kāi)發(fā)_第1頁(yè)
手持移動(dòng)設(shè)備JME應(yīng)用開(kāi)發(fā)_第2頁(yè)
手持移動(dòng)設(shè)備JME應(yīng)用開(kāi)發(fā)_第3頁(yè)
手持移動(dòng)設(shè)備JME應(yīng)用開(kāi)發(fā)_第4頁(yè)
手持移動(dòng)設(shè)備JME應(yīng)用開(kāi)發(fā)_第5頁(yè)
已閱讀5頁(yè),還剩71頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

手持移動(dòng)設(shè)備J2ME應(yīng)用開(kāi)發(fā)4MIDP高級(jí)界面開(kāi)發(fā)第章本章目標(biāo)了解Screen的基本概念了解基本屏幕類的開(kāi)發(fā)掌握控件的開(kāi)發(fā)技術(shù)掌握控件事件的開(kāi)發(fā)過(guò)程掌握對(duì)話框的編寫技巧掌握自繪畫控件的開(kāi)發(fā)技術(shù)4.1MIDP高級(jí)界面軟件在進(jìn)行每一步操作時(shí)所顯示的電腦版面稱為界面。一個(gè)好的界面必備條件是:內(nèi)容清楚、指示明白、屏幕美觀和有親切感。界面通常包含有圖形和文字。程序界面的設(shè)計(jì)是對(duì)適當(dāng)?shù)目丶M(jìn)行取舍及功能的選擇和處理的過(guò)程。在程序設(shè)計(jì)中,需要對(duì)設(shè)計(jì)的方法反復(fù)推敲、琢磨,才能使其達(dá)到完美的境界。但是MIDP的界面設(shè)計(jì)開(kāi)發(fā)不同于一般的桌面程序,它受限于屏幕的大小、顏色、內(nèi)存和處理能力,不可能做到像桌面程序那樣花哨。所以一個(gè)好的界面也應(yīng)該根據(jù)設(shè)備具體情況進(jìn)行有針對(duì)性的設(shè)計(jì),由于使用J2ME提供的基礎(chǔ)控件,所以叫做高級(jí)界面。MIDP高級(jí)界面開(kāi)發(fā)簡(jiǎn)介

MIDP中定義的界面從邏輯上包括兩組API:高級(jí)API和低級(jí)API。高級(jí)API提供了常用的應(yīng)用控件,它主要強(qiáng)調(diào)可移植性,但是高級(jí)API對(duì)于控件的顯示外觀只有有限的控制權(quán),而且事件的使用也很有限,但它的優(yōu)點(diǎn)就是提供了程序的高復(fù)用控件以及增加了系統(tǒng)的整體協(xié)調(diào)性和一致性。MIDP程序界面是通過(guò)屏幕顯示出來(lái)的。由于手機(jī)或其他無(wú)線設(shè)備,一般都具有一個(gè)顯示屏幕,在屏幕上顯示一幅畫面就是一個(gè)Display對(duì)象所要實(shí)現(xiàn)的功能。每個(gè)MIDP程序都由Displayable對(duì)象來(lái)具體處理如何在屏幕上顯示內(nèi)容。MIDP程序可以根據(jù)手機(jī)使用者與程序的交互情況,把每次操作后的畫面通過(guò)Displayable對(duì)象顯示在當(dāng)前屏幕上。Displayable是Display的一個(gè)繼承類,它主要包括兩個(gè)具體的實(shí)現(xiàn)類:高級(jí)界面開(kāi)發(fā)類Screen和低級(jí)界面開(kāi)發(fā)類Canvas。4.1.1Display類的常用函數(shù)Displayable中MIDP1.0就定義的函數(shù)有:booleanisShown()voidaddCommand(Commandcmd)voidremoveCommand(Commandcmd)voidsetCommandListener(CommandListenerl)Displayable中MIDP2.0新添加的函數(shù)有:StringgetTitle()publicvoidsetTitle(Strings)TickergetTicker()publicvoidsetTicker(Tickerticker)publicintgetWidth()publicintgetHeight()protectedvoidsizeChanged(intw,inth)Display類的開(kāi)發(fā)以上函數(shù)都可以在Screen類和Canvas類中使用。但是進(jìn)行MIDP開(kāi)發(fā)的時(shí)候,一定要分清楚程序的開(kāi)發(fā)環(huán)境,如果是在MIDP1.0的開(kāi)發(fā)平臺(tái)下開(kāi)發(fā),則MIDP2.0新添加的函數(shù)是不能夠使用的。在MIDP2.0中,高級(jí)界面開(kāi)發(fā)類的繼承關(guān)系如圖所示。高級(jí)界面開(kāi)發(fā)類Screen類共有4個(gè)繼承它的屏幕類,而Form屏幕類又共有8個(gè)繼承Item類的控件類,其中在MIDP2.0開(kāi)發(fā)平臺(tái)中,F(xiàn)orm類新增加了Customltem類和Spacer類。4.1.2Display類的開(kāi)發(fā)

4.2事件處理事件就是用戶與GUI(圖形界面)交互的時(shí)候所觸發(fā)的事情。在J2ME中,事件會(huì)被傳送至事件處理器,它是一個(gè)專門接受事件對(duì)象并進(jìn)行翻譯、處理的方法,這個(gè)事件處理器一般由J2ME中的監(jiān)聽(tīng)器來(lái)實(shí)現(xiàn)。監(jiān)聽(tīng)器是能夠檢測(cè)事件并且能夠響應(yīng)事件的代碼。當(dāng)一個(gè)用戶與一個(gè)手機(jī)MIDlet程序交互的時(shí)候,事件就會(huì)產(chǎn)生,這個(gè)手機(jī)MIDlet程序就會(huì)響應(yīng)這些事件。而監(jiān)聽(tīng)器就是通過(guò)程序設(shè)計(jì)人員定義的特定函數(shù)來(lái)處理的。需要注意的是每個(gè)事件的處理總是在前一個(gè)事件處理完成以后程序才會(huì)接著處理,這意味著事件不能夠同時(shí)被處理,它們是串行處理的。在MIDP開(kāi)發(fā)中,有以下幾種處理事件的用戶接口:(1)高級(jí)別MIDP的API中抽象命令接口(2)單個(gè)鍵的按下與放開(kāi)的低級(jí)別事件接口(3)Canvas類中的paint()函數(shù)調(diào)用(4)Display類中的Runnable對(duì)象的run()函數(shù),當(dāng)callSerially()函數(shù)被調(diào)用的時(shí)候,run()函數(shù)被觸發(fā)

4.2.2按鈕、菜單編程基礎(chǔ)在介紹事件開(kāi)發(fā)之前首先了解基本的Command(命令)編程。Midlet的javax.Microedition.lcdui包提供了一個(gè)命令Command類,用來(lái)進(jìn)行屏幕上按鈕的相關(guān)開(kāi)發(fā),Command對(duì)象既可以顯示為一個(gè)與鍵盤特定鍵相關(guān)聯(lián)的按鈕,又可以作為屏幕菜單的一個(gè)菜單項(xiàng)。由于手機(jī)程序功能有限,因此并沒(méi)有提供像Windwos程序一樣的菜單控件,而是當(dāng)屏幕需要顯示多個(gè)按鈕的時(shí)候,自動(dòng)生成一個(gè)菜單供用戶選擇使用。創(chuàng)建一個(gè)新的Command對(duì)象需要調(diào)用Command對(duì)象的構(gòu)造函數(shù),構(gòu)造函數(shù)的的語(yǔ)法如下所示:

newCommand(Labels,Type,Priority);按鈕、菜單編程基礎(chǔ)在介紹事件開(kāi)發(fā)之前首先了解基本的Command(命令)編程。Midlet的javax.Microedition.lcdui包提供了一個(gè)命令Command類,用來(lái)進(jìn)行屏幕上按鈕的相關(guān)開(kāi)發(fā),Command對(duì)象既可以顯示為一個(gè)與鍵盤特定鍵相關(guān)聯(lián)的按鈕,又可以作為屏幕菜單的一個(gè)菜單項(xiàng)。由于手機(jī)程序功能有限,因此并沒(méi)有提供像Windwos程序一樣的菜單控件,而是當(dāng)屏幕需要顯示多個(gè)按鈕的時(shí)候,自動(dòng)生成一個(gè)菜單供用戶選擇使用。創(chuàng)建一個(gè)新的Command對(duì)象需要調(diào)用Command對(duì)象的構(gòu)造函數(shù),構(gòu)造函數(shù)的的語(yǔ)法如下所示:

newCommand(Labels,Type,Priority);命令類型的重要指數(shù)

創(chuàng)建一個(gè)Command對(duì)象的時(shí)候,需要指定構(gòu)造函數(shù)的3個(gè)參數(shù),例如創(chuàng)建一個(gè)按鈕標(biāo)簽名稱為“Exit”的命令對(duì)象,指定了它的類型是“EXIT”類型,具體代碼如下所示://定義了一個(gè)Command控件變量

privateCommandexitCommand;//創(chuàng)建一個(gè)新的Command對(duì)象

exitCommand1=newCommand(“Exit”,Command.EXIT,1);添加按鈕的方法在程序的構(gòu)造函數(shù)HelloWorld()中新添加一個(gè)“Command.BACK”屬性的按鈕,更改部分的代碼如下所示。1privateCommandexitCommand,backCommand2privateTextBoxtb;3publicHelloWorld(){//創(chuàng)建2個(gè)Command對(duì)象4exitCommand=newCommand(“Exit”,Command.EXIT,1);5backCommand=newCommand(“Back”,Command.BACK,1);6tb=newTextBox(“HelloMIDlet”,“Hello,World!”,15,0);7tb.addCommand(exitCommand);8tb.addCommand(backCommand);9tb.setCommandListener(this);10}其中第1行代碼添加了一個(gè)新的Command對(duì)象backCommand,第8行代碼使用addCommand()函數(shù)把backCommand對(duì)象添加到TextBox屏幕對(duì)象中

添加按鈕的方法運(yùn)行效果添加按鈕的方法如果在原來(lái)的基礎(chǔ)上再添加幾個(gè)按鈕,看看會(huì)出現(xiàn)什么樣的效果?在“HelloWorld”程序中多添加2個(gè)Command對(duì)象的具體代碼如下所示:1privateCommandexitCommand,backCommand,screenCommand1,screenCommand2;2privateTextBoxtb;3publicHelloWorld(){//創(chuàng)建2個(gè)Command對(duì)象4exitCommand=newCommand(“Exit”,Command.EXIT,1);5backCommand=newCommand(“Back”,Command.BACK,1);6screenCommand1=newCommand(“Screen1”,Command.SCREEN,1);7screenCommand2=newCommand(“Screen2”,Command.SCREEN,1);8tb=newTextBox(“HelloMIDlet”,“Hello,World!”,15,0);9tb.addCommand(backCommand);10tb.addCommand(exitCommand);11tb.addCommand(screenCommand1);12tb.addCommand(screenCommand2);13tb.setCommandListener(this);14}添加按鈕的方法由于添加的2個(gè)按鈕是Screen屬性的按鈕,而且手機(jī)使用習(xí)慣是在屏幕左右各只有一個(gè)按鈕,所以添加多個(gè)按鈕以后,程序?qū)?huì)自動(dòng)顯示一個(gè)Menu菜單按鈕,在模擬器上單擊Menu菜單,可以看到顯示如圖所示的3個(gè)菜單項(xiàng),而“Exit按鈕本來(lái)在程序代碼中是最先添加的,現(xiàn)在被自動(dòng)調(diào)整為第3項(xiàng),也就是菜單中的最后一項(xiàng)。這些都是根據(jù)按鈕的類型來(lái)自動(dòng)調(diào)整的。由此可見(jiàn),如果需要顯示菜單效果,只需要多添加幾個(gè)按鈕即可。

處理高級(jí)別事件

所謂的高級(jí)別事件,就是指在處理高級(jí)界面上的控件時(shí)候需要處理的事件。每一個(gè)高級(jí)界面的Dislayable對(duì)象都有一個(gè)相應(yīng)監(jiān)聽(tīng)器,該監(jiān)聽(tīng)器用來(lái)監(jiān)聽(tīng)控件是否已經(jīng)被觸發(fā)了相關(guān)的事件。本小節(jié)僅僅介紹Command對(duì)象的事件開(kāi)發(fā),其他控件的事件開(kāi)發(fā)將結(jié)合相關(guān)小節(jié)的具體內(nèi)容再進(jìn)行詳細(xì)介紹。要處理按鈕高級(jí)別事件,程序必須繼承一個(gè)命令監(jiān)聽(tīng)器接口類CommandListener類,具體操作如下所示:publicclassHelloWorldextendsMIDletimplementsCommandListener{}

4.2.3處理高級(jí)別事件在一個(gè)MIDlet程序的開(kāi)發(fā)中,如果繼承了監(jiān)聽(tīng)器接口類CommandListener類,所有的按鈕事件都會(huì)觸發(fā)事件,然后執(zhí)行publicvoidcommandAction()函數(shù)的,通過(guò)這個(gè)函數(shù)可以處理幾乎所有程序中的事件,當(dāng)屏幕按鈕被按下,就立刻執(zhí)行commandAction()函數(shù)中相應(yīng)的一系列的代碼。實(shí)現(xiàn)觸發(fā)了exitCommand命令對(duì)象以后,立刻關(guān)閉MIDlet程序的具體代碼如下所示:1publicvoidcommandAction(Commandc,Displayabled){2if(c==exitCommand){3try{//關(guān)閉程序4destroyApp(false);5 }catch(MIDletStateChangeExceptionexception){6System.out.println(“MIDletStateChangeException”);7}8notifyDestroyed();9}10}處理高級(jí)別事件第1行代碼指明了2個(gè)函數(shù)參數(shù),其中參數(shù)Command表示當(dāng)前被觸發(fā)的按鈕對(duì)象,參數(shù)d表示當(dāng)前顯示的屏幕對(duì)象。第2行代碼判斷到屏幕上觸發(fā)的Command對(duì)象是exitCommand對(duì)象,則調(diào)用destroyApp(false)函數(shù)申請(qǐng)關(guān)閉程序,在關(guān)閉的過(guò)程中需要釋放所有資源并保存持久性數(shù)據(jù),然后使用notifyDestroyed()函數(shù)通知系統(tǒng)立刻關(guān)閉該程序,讓系統(tǒng)認(rèn)為所有資源已經(jīng)被回收了,然后可以安全地關(guān)閉程序了。

4.2.4處理低級(jí)別事件

低級(jí)別事件是指處理低級(jí)界面開(kāi)發(fā)Canvas類的時(shí)候需要自己定義的按鍵作用所觸發(fā)的相關(guān)事件。當(dāng)一個(gè)鍵按下的時(shí)候,系統(tǒng)會(huì)返回相關(guān)的鍵代碼,需要自己做這部分的代碼進(jìn)行事件處理,在低級(jí)界面設(shè)計(jì)一章將會(huì)詳細(xì)介紹如何處理低級(jí)別事件。

4.3基本屏幕控件屏幕控件就是負(fù)責(zé)屏幕顯示的控件,目前主要有4種,它們的API處理過(guò)程都是繼承Screen類的,它們的名稱和具體功能如下所示:List:從指定的幾個(gè)列表種選取需要的選項(xiàng)TextBox:用來(lái)輸入文本Alert:用來(lái)顯示通知用戶的一些文本和圖像信息Form:用來(lái)顯示多個(gè)不同類型的控件,使它們顯示在同一屏幕上4.3.1TextBoxTextBox是可以允許用戶編輯文本的屏幕對(duì)象。創(chuàng)建一個(gè)TextBox屏幕對(duì)象必須使用TextBox的構(gòu)造函數(shù),TextBox的構(gòu)造函數(shù)如下所示:TextBox(Stringtitle,Stringtext,intmaxSize,intconstraints);

其中參數(shù)title指定了TextBox的標(biāo)題,參數(shù)text指定了TextBox的初始化內(nèi)容,參數(shù)maxSize指定了TextBox允許輸入的最大字符數(shù),如果輸入超過(guò)最大數(shù)目的字符,則會(huì)拋出異常。參數(shù)constraints指定了TextBox輸入內(nèi)容的限制類型,即只能輸入指定類型的字符。程序可以同時(shí)為每個(gè)TextBox設(shè)置它的輸入限制,可以限制輸入的字符串的類型??梢栽趧?chuàng)建TextBox對(duì)象的時(shí)候就設(shè)置constraints參數(shù),constraints參數(shù)可以是如下的幾種類型:

(1)ANY:允許輸入任何文本

(2)EMAILADDR:允許輸入一個(gè)Email地址

(3)NUMERIC:允許輸入輸入一個(gè)整數(shù)

(4)PHONENUMBER:允許輸入一個(gè)電話號(hào)碼

(5)URL:允許輸入一個(gè)網(wǎng)絡(luò)URL地址

(6)PASSWORD:允許輸入字符被*號(hào)代替的密碼4.3.2List一個(gè)屏幕可能包含有多個(gè)選擇,每個(gè)選擇都是由一個(gè)標(biāo)題描述實(shí)際功能,MIDP提供了List屏幕類來(lái)進(jìn)行處理這方面的要求。List屏幕類用來(lái)成列地顯示數(shù)據(jù),列表屏幕的表項(xiàng)通常包括圖標(biāo)和標(biāo)題兩部分,標(biāo)題用來(lái)對(duì)具體的功能進(jìn)行描述。List屏幕類的每一個(gè)類表項(xiàng)的功能就好像一個(gè)Command控件的功能,可以通過(guò)按下手機(jī)鍵盤的確定鍵(SELECT鍵)選擇它們,同時(shí)List屏幕類觸發(fā)相關(guān)的事件。創(chuàng)建一個(gè)List屏幕類的對(duì)象可以使用的構(gòu)造函數(shù)有兩種,它們的具體定義如下所示:List(Stringtitle,intlistType);List(Stringtitle,intlistType,String[]stringElements,Image[]imageElements);List創(chuàng)建一個(gè)List對(duì)象的代碼如下所示:1ListmainList;2String[]stringArray={//列表的標(biāo)題組“TextboxA”,“TextboxB”,“TextboxC”,};3mainList=newList(“ListExample”,Choice.IMPLICIT,stringArray,null);4mainList.addCommand(exitCommand);5mainList.addCommandListener(this);ListList屏幕對(duì)象可以使用構(gòu)造函數(shù)一次性的把所有列表選項(xiàng)都顯示出來(lái),也可以通過(guò)append()函數(shù)動(dòng)態(tài)的向List添加新的列表項(xiàng)。例如在原來(lái)的列表基礎(chǔ)上新添加2個(gè)列表項(xiàng)的代碼如下所示:

mainList.append(“TextboxD”,null);//List屏幕添加一個(gè)列表項(xiàng)

mainList.append(“TextboxE”,null);List如果需要在列表選項(xiàng)左邊顯示圖片,則要指定圖片數(shù)組,創(chuàng)建List的時(shí)候作為構(gòu)造函數(shù)的第4個(gè)函數(shù)代入即可,如果不顯示,則可以使用“null”為參數(shù)。創(chuàng)建一個(gè)圖片數(shù)組的例子代碼如下所示:1Image[]imageArray=null;2try{//指定png格式的圖片的路徑3Imageicon=Image.createImage(“/Icon.png”);4imageArray=newImage[]{//圖像數(shù)組

icon, icon, icon };}catch(java.io.IOExceptionerr){5imageArray=null;6}

第3行代碼指定了圖片保存的路徑“/Icon.png”,這個(gè)路徑表示名稱為“Icon.png”的圖片是存放在程序所在項(xiàng)目的根目錄下的。目前List屏幕對(duì)象支持的圖片類型只能是“.png”格式的圖片。ListMIDP2.0中,List的類型有以下3種表現(xiàn)方式:1.隱含方式Choice.IMPLICIT

隱含方式是一種設(shè)置默認(rèn)選項(xiàng)的模式,在一組列表選項(xiàng)中,只能選擇其中的一個(gè)列表選項(xiàng)。2.單選方式Choice.EXClUSlVE

單選方式就是在一組幾個(gè)列表選項(xiàng)中,只能有一個(gè)列表選項(xiàng)被選擇,但是在選項(xiàng)的左邊出現(xiàn)一個(gè)圓形的單選框。3.多選方式Choice.MULTIPLE多選方式就是在一組幾個(gè)列表選項(xiàng)中,可以有多個(gè)列表選項(xiàng)同時(shí)被選擇,在列表選項(xiàng)的右邊出現(xiàn)一個(gè)正方形的復(fù)選框,選擇以后將會(huì)出現(xiàn)一個(gè)打勾符號(hào)。List下面的例子展現(xiàn)了如何顯示一個(gè)帶圖標(biāo)的隱含方式(Choice.IMPLICIT)的List屏幕,具體的代碼如下所示:importjavax.microedition.lcdui.*;importjavax.microedition.midlet.MIDlet;publicclassListControlextendsMIDlet{ privateListmainList; privateDisplaydisplay; privatebooleanfirstTime; publicListControl(){ display=Display.getDisplay(this); firstTime=true; } protectedvoidstartApp(){ if(firstTime){ //創(chuàng)建一個(gè)圖形對(duì)象

Image[]imageArray=null;Listtry{ //從資源目錄讀取圖片資源

Imageicon=Image.createImage("/Icon.png"); //注意,每個(gè)List選項(xiàng)都需要一個(gè)圖標(biāo)

imageArray=newImage[]{icon,icon,icon,icon}; }catch(java.io.IOExceptionerr){ System.out.print("loadfailed..."); } //屏幕類表項(xiàng)的名稱

String[]stringArray={"List1","List2","List3","List4"}; //創(chuàng)建一個(gè)隱患的列表屏幕對(duì)象mainList=newList("Choosetype",Choice.IMPLICIT,stringArray,imageArray); //顯示List屏幕

display.setCurrent(mainList); firstTime=false; } } protectedvoidpauseApp(){ } protectedvoiddestroyApp(booleanarg0){ }}List創(chuàng)建List對(duì)象的時(shí)候一個(gè)比較重要的事情就是,字符串?dāng)?shù)組的的長(zhǎng)度必須和圖像數(shù)組的長(zhǎng)度一致,否則將會(huì)拋出IllegalAIIgumentException異常。選擇一個(gè)List的列表選項(xiàng)以后,如何處理相應(yīng)的事件?以下的例子將展示如何處理IMPLICIT類型的List屏幕列表項(xiàng)的事件,例子具體的代碼如下所示:publicvoidcommandAction(Commandc,Displayabled){ if(d.equals(mainList)){ //按下手機(jī)鍵盤的Select鍵,即確定鍵

if(c==List.SELECT_COMMAND){ if(d.equals(mainList)){ //判斷選擇了哪一個(gè)列表項(xiàng)

switch(((List)d).getSelectedIndex()){ case0: tb.setString("TextboxA"); display.setCurrent(tb); break; case1: tb.setString("TextboxB"); display.setCurrent(tb);break;Listcase2: tb.setString("TextboxC"); display.setCurrent(tb); break; } } } }else{ //返回主屏幕

if(c==backCommand){ display.setCurrent(mainList); } } if(c==exitCommand){ destroyApp(false); notifyDestroyed(); } }}List對(duì)于多選框List的事件處理,類似單選框的事件處理方法,不同的是需要通過(guò)getSelectedFlags(boolean[]selectedArrayreturn)數(shù)獲得哪幾個(gè)List的列表項(xiàng)已經(jīng)被選擇了,選擇的結(jié)果存儲(chǔ)在一個(gè)布爾數(shù)組中,以下的例子將展示如何處理MULTIPLE類型的List的事件,即當(dāng)選擇了多個(gè)List列表選項(xiàng)以后如何知道究竟都選擇了哪幾個(gè)列表項(xiàng),并且處理相應(yīng)的事件。具體的代碼如下所示:publicvoidcommandAction(Commandc,Displayabled){ if(d.equals(mainList)){ if(c==okCommand){ if(d.equals(mainList)){ String[]stringTextbox={"Selected1","Selected2", "Selected3"};Listboolean[]selectedArray=newboolean[3]; mainList.getSelectedFlags(selectedArray); inti=0; Stringstr=""; for(i=0;i<3;i++) if(selectedArray[i]==true){ str=str+stringTextbox[i]+"\n"; } tb.setString(str); display.setCurrent(tb); } } }else{ if(c==backCommand){ display.setCurrent(mainList); } } if(c==exitCommand){ destroyApp(false); notifyDestroyed(); } }}4.3.3Alert當(dāng)程序出現(xiàn)錯(cuò)誤,就需要提醒用戶?;蛘弋?dāng)一個(gè)程序需要運(yùn)行很長(zhǎng)時(shí)間,比如說(shuō)一個(gè)游戲開(kāi)始讀取數(shù)據(jù)的時(shí)間比較長(zhǎng),此時(shí)最好可以顯示一個(gè)等待畫面。Alert類就是這樣一個(gè)顯示等待或者錯(cuò)誤信息的屏幕類。既然它也是屏幕類,所以它可以在屏幕上顯示圖片以及文字。Alert的功能類似Windows操作系統(tǒng)的彈出對(duì)話框功能,用來(lái)提示用戶一些特定的信息。比如當(dāng)用戶選擇關(guān)閉程序,就可以創(chuàng)建一個(gè)Alert對(duì)象,提示用戶是否需要保存設(shè)置才關(guān)閉程序。創(chuàng)建一個(gè)Alert對(duì)象需要使用到它的構(gòu)造函數(shù),Alert的構(gòu)造函數(shù)的原型有2個(gè):Alert(Stringtitle);Alert(Stringtitle,StringalertText,ImagealertImage,AlertTypealertType);

其中參數(shù)“title”指定了Alert屏幕的標(biāo)題,參數(shù)“alertText”指定了Alert屏幕需要顯示的提示信息,參數(shù)“alertlmage”指定了Alert屏幕需要顯示的圖片,參數(shù)“alertType”指定了Alert屏幕的類型。Alert1.Alert的類型由于Alert是作為提示信息的屏幕,而信息的類型可能很多,所以Alert也細(xì)分了顯示信息的不同類型,目前Alert的類型有以下5種:

(1)AlertType.ALARM:提示已經(jīng)通知系統(tǒng)處理用戶請(qǐng)求的前一個(gè)事件

(2)AlertType.CONFIRMATION:提示用戶確認(rèn)

(3)AlertType.ERROR:提示錯(cuò)誤信息

(4)AlertType.INFO:提供給用戶非威脅性的信息

(5)AlertType.WARNING:警告用戶在進(jìn)行具有潛在危險(xiǎn)的操作

2.Alert的等待

Alert可以設(shè)置Alert對(duì)象存在的時(shí)問(wèn),Alert等待的時(shí)間是用毫秒計(jì)算的,可以使用setTimeout(inttime)函數(shù)設(shè)置Alert屏幕存在的時(shí)間。如果希望Alert對(duì)象永遠(yuǎn)存在,參數(shù)可以設(shè)置為“Alert.FOREVER”,如果設(shè)置為“Alert.FOREVER”,用戶只能通過(guò)激活A(yù)lert對(duì)象中的Done命令按鈕才能解除Alert對(duì)象。Alert3.Alert的Command對(duì)象

Alert類繼承于Displayable類,雖然Alert同時(shí)也繼承了Displayable的addCommand函數(shù),但是如果使用該函數(shù),將會(huì)拋出IllegalStateException異常,這是因?yàn)锳lert屏幕對(duì)象很特殊,不同于其他的屏幕對(duì)象,它只能作為提示信息,所以它不能添加自己的命令對(duì)象。如果需要有特定的命令按鈕的提示性屏幕,那么就需要使用其他Screen類或者使用低級(jí)界面API屏幕類來(lái)向用戶顯示信息。

4.Alert的下一個(gè)顯示屏幕(Displayable)Alert屏幕設(shè)置的等待時(shí)間過(guò)去以后或者觸發(fā)了Alert屏幕上的Done按鈕,程序?qū)⑼顺鯝lert屏幕,然后轉(zhuǎn)移到下一個(gè)屏幕,如果使用Display.setcurrent(DisplayablenextDisplayablel方法,例如:Display.setcurrent(alert),將默認(rèn)為轉(zhuǎn)移到原來(lái)觸發(fā)Alert對(duì)象的屏幕。如果使用Display.setcurrent(Alertalert,DisplayablenextDisplayable)方法,則轉(zhuǎn)移到nextDisplayable屏幕。Alert5.MIDP2.0新添加的selIndjcator(Gaugeindicator)函數(shù)使用setlndicator函數(shù)可以在顯示Alert屏幕的時(shí)候顯示一個(gè)進(jìn)度條,Gauge是一個(gè)進(jìn)度條對(duì)象,下面章節(jié)將會(huì)詳細(xì)介紹。在Alert屏幕中使用進(jìn)度條控件非常簡(jiǎn)單,使用這個(gè)函數(shù)的例子代碼如下所示:1Alertalert=newAlert(“Alert”,2“ThisisaAlertExample!”,img,AlertType.INFO);3Gaugeindicator=newGauge(null,false,max,0);4alert.setIndicator(indicator);

當(dāng)然也可以使用一個(gè)后臺(tái)線程設(shè)置進(jìn)度條Gauge對(duì)象的進(jìn)程顯示情況,相關(guān)知識(shí)將在Gauge小節(jié)詳細(xì)介紹。4.3.4FormForm是一個(gè)特殊的屏幕類,它的最大特點(diǎn)就是它本身不僅僅是一個(gè)屏幕,而且是控件的容器,在這個(gè)容器上可以放置多種控件,比如圖像、只讀文本、可編輯文本域、可編輯日期域還有多選按鈕等等控件。Form類可以放置繼承了javax.microedition.lcdui.Item類的任何控件,并不象List和TextBox類一樣,在屏幕上只存在單一的功能。每一個(gè)Item控件都只能夠放置在一個(gè)Form類容器中,如果企圖同時(shí)放置在不同的容器中,就會(huì)拋出IllegalStateException異常。FormForm容器對(duì)放置在它上面的控件的布局是有一定的規(guī)則的,一般來(lái)說(shuō),每放置一個(gè)控件,控件可以設(shè)置自身的布局,如果沒(méi)有設(shè)置,則默認(rèn)為Form類新建一行屏幕空間用來(lái)放置該控件,并且該控件是從左到右設(shè)置的。如果控件較大,則Form類會(huì)自動(dòng)調(diào)整控件占有行數(shù)的多少,但是一般控件的寬度就是屏幕的寬度,不會(huì)出現(xiàn)水平滾動(dòng)條,但是當(dāng)控件太多,會(huì)自動(dòng)出現(xiàn)垂直滾動(dòng)條。由于沒(méi)有水平滾動(dòng)條和屏幕大小的限制,文本可能被重新排版,圖像可能被裁減。在MIDP2.0中,F(xiàn)orm類的Item控件可以指定最小尺寸和最合適的尺寸,同時(shí)可以設(shè)置它們自身在容器中的布局。Form容器對(duì)它里面的控件是通過(guò)焦點(diǎn)來(lái)控制,通過(guò)移動(dòng)焦點(diǎn),可以對(duì)焦點(diǎn)所在的控件進(jìn)行操作。一個(gè)Form類的創(chuàng)建非常簡(jiǎn)單,例如創(chuàng)建一個(gè)Form屏幕對(duì)象的代碼如下所示:privateFormmainForm;mainForm=newForm(“Ticker例子”);Form類的對(duì)象可以通過(guò)append()函數(shù)添加新的控件,例如下面的代碼添加了一個(gè)TextField類型的控件:mainForm.append(newTextField(“hello”,null,25,TextField.ANY);4.3.5Ticker

Ticker是一個(gè)特殊的屏幕控件,它的作用就是在其他的屏幕對(duì)象上顯示滾動(dòng)的文字。任何一個(gè)屏幕類都可以使用setTicker()函數(shù)設(shè)置Ticker控件。Ticker控件可以在創(chuàng)建的時(shí)候指定要顯示的文字,也可以使用setString()函數(shù)指定要顯示的文字。下面的例子創(chuàng)建了一個(gè)Form類,然后把這個(gè)Form類與一個(gè)Ticker關(guān)聯(lián)起來(lái),然后在屏幕上會(huì)自動(dòng)顯示一個(gè)滾動(dòng)的Ticker控件。注意,有時(shí)候滾動(dòng)條在某些手機(jī)上面無(wú)法正常顯示,因?yàn)橐词謾C(jī)是否支持Ticker控件。Tickerimportjavax.microedition.lcdui.*;importjavax.microedition.midlet.MIDlet;publicclassTickerDemoextendsMIDlet{ privatestaticfinalStringTICKER_TEXT="這是一個(gè)滾動(dòng)條例子"+"正在滾動(dòng),可以一直滾動(dòng)"+"除非有觸發(fā)了停止事件";privateFormmainForm;publicTickerDemo(){mainForm=newForm("Ticker例子");}protectedvoidstartApp(){Tickert=newTicker(TICKER_TEXT);mainForm.setTicker(t);Display.getDisplay(this).setCurrent(mainForm);}protectedvoiddestroyApp(booleanunconditional){}protectedvoidpauseApp(){}}4.4Item控件實(shí)例Form屏幕類是控件的容器,而能夠往Form類這個(gè)容器里面放置的控件都是繼承Item類的控件。所有繼承Item類的控件都擁有標(biāo)題屬性,標(biāo)題一定是與控件放置在同一行,或者放在上一行的位置,具體位置是根據(jù)屏幕大小由系統(tǒng)自動(dòng)調(diào)整的。當(dāng)Item類的控件在屏幕不能完全可見(jiàn)的時(shí)候,MIDP會(huì)盡量使標(biāo)題屬性和控件可見(jiàn)性保持一致。

MIDP2.0開(kāi)始允許開(kāi)發(fā)人員調(diào)整控件在Form中的布局。目前支持的布局屬性如表所示。

Item空間實(shí)例Item控件實(shí)例表中的布局屬性可以使用setLayout(intlayout)來(lái)設(shè)置,可以同時(shí)使用多個(gè)布局屬性,多個(gè)布局屬性使用符號(hào)“|”間隔開(kāi),也可以使用getLayout()獲得當(dāng)前控件使用的屬性。每個(gè)控件的尺寸都有2個(gè)屬性:最小尺寸和最佳尺寸。最小尺寸的作用就是當(dāng)其他控件或者標(biāo)題占用了一定的空間,容器將判斷控件所需要的空間大小,如果連最小尺寸的空間都不夠了,則把控件放在新的一行上。最佳尺寸相當(dāng)于在空間允許的情況下,容器空間的安排盡量靠近控件的最佳尺寸??梢允褂胹etPreferredSize()函數(shù)設(shè)置最佳尺寸。4.4.1TextField

TextField是一個(gè)文本輸入控件,它的功能類似TextBox屏幕控件,不同的是TextBox本身就是一個(gè)屏幕類,可以使用Display.setCurrent()函數(shù)在屏幕上顯示出來(lái),而TextField必須放置在Form屏幕類中才能夠顯示出來(lái)。創(chuàng)建一個(gè)TextField對(duì)象的控件必須設(shè)置它的構(gòu)造函數(shù),它的構(gòu)造函數(shù)的原型如下所示:TextField(Stringlabel,Stringtext,intmaxSize,intconstraints)

其中參數(shù)“l(fā)abel”設(shè)置了控件的標(biāo)題,參數(shù)“text”設(shè)置了默認(rèn)顯示的內(nèi)容,參數(shù)“maxSize”指定了控制能夠容納的最大字符數(shù),如果超過(guò)指定的最大字符數(shù)則拋出異常。參數(shù)“constraints”指定了顯示內(nèi)容的限制屬性,TextField控件與TextBox中的限制屬性是一樣的。TextField下面的例子展示了如何創(chuàng)建一個(gè)Form屏幕類,然后使用Form類的append()函數(shù)動(dòng)態(tài)地添加各種類型的TextField控件。具體的代碼如下所示:importjavax.microedition.midlet.MIDlet;importjavax.microedition.lcdui.*;publicclassTextFieldDemoextendsMIDletimplementsCommandListener{ privateCommandexitCommand=newCommand("退出",Command.EXIT,1); privateFormmainForm; publicTextFieldDemo(){ mainForm=newForm("TextField"); } protectedvoidstartApp(){ mainForm.append("顯示各種類型的TextField"); mainForm.append(newTextField("任何字符","",15,TextField.ANY));TextFieldmainForm.append(newTextField("E-Mail","",15,TextField.EMAILADDR));mainForm.append(newTextField("數(shù)字","",15,TextField.NUMERIC));mainForm.append(newTextField("浮點(diǎn)數(shù)","",15,TextField.DECIMAL));mainForm.append(newTextField("電話","",15,TextField.PHONENUMBER));mainForm.append(newTextField("密碼","",15,TextField.PASSWORD));mainForm.append(newTextField("網(wǎng)址URL","",15,TextField.URL));mainForm.addCommand(exitCommand);mainForm.setCommandListener(this); Display.getDisplay(this).setCurrent(mainForm); } publicvoidcommandAction(Commandc,Displayables){ if(c==exitCommand){ destroyApp(false); notifyDestroyed(); } } protectedvoiddestroyApp(booleanunconditional){} protectedvoidpauseApp(){}}TextField程序運(yùn)行以后如圖所示,F(xiàn)orm類屏幕上分別添加了各種類型的TextField控件,輸入的字符只能夠輸入指定類型的字符,屬于其他類型的字符將不能夠輸入。例如密碼類型的TextField輸入的數(shù)據(jù)將會(huì)自動(dòng)使用“*”號(hào)掩藏起來(lái)。4.4.2ImageItemImageltem是一個(gè)圖形顯示控件,它的特點(diǎn)是把一幅圖像可以作為Form類的一個(gè)控件在屏幕上顯示出來(lái)。在MIDP2.0中,Imageltem控件增加了2個(gè)附加的功能,可以做為圖形按鈕或者網(wǎng)址超級(jí)鏈接的圖片。創(chuàng)建一個(gè)Imageltem對(duì)象的控件必須設(shè)置它的構(gòu)造函數(shù),Imageltem擁有2個(gè)構(gòu)造函數(shù),它們的原型如下所示:publicImageItem(Stringlabel,Imageimg,intlayout,StringaltText)publicImageItem(Stringlabel,Imageimg,intlayout,StringaltText,intappearanceMode)

其中參數(shù)“l(fā)abel”設(shè)置了控件的標(biāo)題,參數(shù)“img”設(shè)置要顯示的Image圖像對(duì)象,參數(shù)“l(fā)ayout”指定了控件的布局,參數(shù)“altText”指定了如果不能夠顯示圖片或者圖片對(duì)象不存在,則使用一個(gè)字符串代替圖片控件,altFext參數(shù)就存儲(chǔ)了這個(gè)替代功能的字符串。參數(shù)“appearanceMode”指定了Imageltem控件的類型,它共有3個(gè)類型,如下所示:

(1)Item.PIAIN類型:默認(rèn)類型

(2)Item.HYPERLINK類型:超級(jí)鏈接類型

(3)Item.BUTTON類型:圖像按鈕類型如果沒(méi)有指定appearanceMode參數(shù),則默認(rèn)為Item.PLAIN類型。

ImageItem下面的例子首先創(chuàng)建了一個(gè)Form屏幕類,然后添加了兩個(gè)Item.PLAIN類型的Imageltem控件,這兩個(gè)Imageltem控件使用了不同的布局類型,一個(gè)使用默認(rèn)的布局類型,一個(gè)使用了擴(kuò)展可用寬度和控件處于新一行的布局類型,具體的代碼如下所示:importjavax.microedition.midlet.MIDlet;importjavax.microedition.lcdui.*;publicclassImageItemDemoextendsMIDletimplementsCommandListener{ privateCommandexitCommand=newCommand("退出",Command.EXIT,1); privateFormmainForm; privateImageItempngItem_1,pngItem_2; publicImageItemDemo(){ mainForm=newForm("ImageItem"); } protectedvoidstartApp(){ mainForm.append("顯示各種類型的ImageItem"); try{

pngItem_1=newImageItem("默認(rèn)圖像控件",Image.createImage("/Image.png"),Item.LAYOUT_DEFAULT,"小豬圖片"); pngItem_2=newImageItem("默認(rèn)圖像控件",Image.createImage("/Image.png"),Item.LAYOUT_2|Item.LAYOUT_EXPAND|Item.LAYOUT_NEWLINE_BEFORE,"小豬圖片");ImageItem}catch(Exceptione){ System.out.println("loadimageerror"); } mainForm.append(pngItem_1); mainForm.append(pngItem_2); mainForm.addCommand(exitCommand); mainForm.setCommandListener(this); Display.getDisplay(this).setCurrent(mainForm); } publicvoidcommandAction(Commandc,Displayables){ if(c==exitCommand){ destroyApp(false); notifyDestroyed(); } } protectedvoiddestroyApp(booleanunconditional){ } protectedvoidpauseApp(){ }}ImageItem

程序運(yùn)行以后效果如圖所示,分別顯示了2幅相同的圖片。但是由于布局不同,標(biāo)題占用的空間不同。第一幅圖片的標(biāo)題“默認(rèn)圖像控件”占用了屏幕的2行控件,這個(gè)標(biāo)題的字符串的寬度剛好與圖片的寬度一樣;第2幅圖片的標(biāo)題則沒(méi)有占用2行,因?yàn)閳D片雖然大小沒(méi)有改變,但是提供給第2幅圖片顯示的空間是整個(gè)屏幕寬度大小的空間,所以標(biāo)題也可以使用屏幕寬度大小的空間。

4.4.3StringItem

StringItem控件就是顯示只讀信息的Item控件,用戶不能夠更改控件的提示信息。它的功能類似其他控件標(biāo)題的作用,但是由于它本身是一個(gè)控件,所以它有其他控件標(biāo)題所不具備的特點(diǎn),就是可以使用控件布局,安排信息的顯示位置。MIDP2.0開(kāi)始,StremItem控件添加了2個(gè)功能,就是可以作為字符串按鈕和超級(jí)鏈接控件,創(chuàng)建一個(gè)StreamItem控件必須使用它的構(gòu)造函數(shù),它擁有2個(gè)構(gòu)造函數(shù),具體如下所示:publicStringItem(Stringlabel,Stringtext)publicStringItem(Stringlabel,Stringtext,intappearanceMode);

其中參數(shù)“l(fā)abel”指定了StringItem控件的標(biāo)題,參數(shù)“text”指定了需要顯示的文本信息,參數(shù)“appearanceMode”指定控件顯示的類型,它共有3個(gè)類型,如下所示:

(1)Item.PLAIN類型:默認(rèn)類型

(2)Item.HYPERLINK類型:超級(jí)鏈接類型

(3)Item.BUTTON類型:圖像按鈕類型創(chuàng)建一個(gè)StringItem控件很簡(jiǎn)單,但是當(dāng)StringItem做為按鈕控件或者超級(jí)鏈接控件的時(shí)候,需要處理按鈕按下事件。在Item控件中是使用ItemCommandListener()函數(shù)設(shè)置監(jiān)聽(tīng)器,然后在commandAction(Commandc,Itemitem)函數(shù)中處理事件,需要注意的是commandAction(Commandc,Itemitem)函數(shù)的第2個(gè)參數(shù)是Item控件,并不是以前程序中的Displayable參數(shù)。當(dāng)然程序需要繼承ItemCommandListener監(jiān)聽(tīng)器接口。StringItem

下面的例子展示了3種StringItem控件的使用方法,當(dāng)選Item.HYPERLINK類型和Item.BUTTON類型的StringItem控件的時(shí)候,將會(huì)出現(xiàn)一個(gè)“Go”和“Press”按鈕,按下該“Go”按鈕,程序會(huì)切換到一個(gè)Alert屏幕。具體代碼如下所示:importjavax.microedition.lcdui.*;importjavax.microedition.midlet.MIDlet;publicclassStringItemDemoextendsMIDletimplementsCommandListener,ItemCommandListener{privateDisplaydisplay;privateFormmainForm;privatefinalstaticCommandhttpCommand=newCommand("Go",Command.ITEM,1);privatefinalstaticCommandokCommand= newCommand("Press",Command.ITEM,1);privatefinalstaticCommandexitCommand= newCommand("Exit",Command.EXIT,1);StringItem

protectedvoidstartApp(){display=Display.getDisplay(this);mainForm=newForm("StringItemDemo");StringItemitem=newStringItem("標(biāo)題:","StringItem具體內(nèi)容");mainForm.append(item);item=newStringItem("Hyper-Link","/sports",Item.HYPERLINK);item.setDefaultCommand(httpCommand);item.setItemCommandListener(this);mainForm.append(item);item=newStringItem("","確定",Item.BUTTON);item.setDefaultCommand(okCommand);item.setItemCommandListener(this);mainForm.append(item);mainForm.addCommand(exitCommand);mainForm.setCommandListener(this);display.setCurrent(mainForm);}StringItem

publicvoidcommandAction(Commandc,Itemitem){if(c==httpCommand){Stringtext="正在連接網(wǎng)絡(luò).....";Alerta=newAlert("URL",text,null,AlertType.INFO);display.setCurrent(a);}elseif(c==okCommand){Stringtext="你單擊了【確定】按鈕...";Alerta=newAlert("Action",text,null,AlertType.INFO);display.setCurrent(a);}}publicvoidcommandAction(Commandc,Displayabled){destroyApp(false);notifyDestroyed();}protectedvoiddestroyApp(booleanunconditional){}protectedvoidpauseApp(){}}StringItem

程序運(yùn)行以后效果如圖所示,屏幕上顯示了3個(gè)Stringltem控件,前2個(gè)Stringltem控件都有自己的標(biāo)題,按鈕控件沒(méi)有設(shè)置標(biāo)題。選擇第2個(gè)StringItern控件的時(shí)候,屏幕右下角將顯示一個(gè)“Go”按鈕,按下屏幕上的“Go”按鈕將會(huì)出現(xiàn)一個(gè)提示“正在連接網(wǎng)絡(luò)”的Alert屏幕。4.4.4ChoiceGroup

ChoiceGroup是一個(gè)多選控件,功能與List屏幕的功能類似,都是提供多種選擇的功能。不同是ChoiceGroup是一個(gè)Item控件,ChoiceGroup控件有2個(gè)不同的構(gòu)造函數(shù),只有放置在容器內(nèi)才能夠在屏幕上顯示和使用。它們?nèi)缦滤荆簆ublicChoiceGroup(Stringlabel,intchoiceType)publicChoiceGroup(Stringlabel,intchoiceType,String[]stringElements,Image[]imageElements)

其中,參數(shù)“l(fā)abel”指定了控件的標(biāo)題屬性,參數(shù)“choiceType”指定了控件的顯示類型,它共有3種類型,MIDP2.0還提供了一個(gè)PoPup下拉列表控件,這3種類型的常量是Choice.EXCLUSIVE、Choice.MULTIPLE和Choice.POPUP。參數(shù)“stringElements”指定了Choice.EXCLUSIVE、Choice.MULTIPLE和Choice.POPUP類型的ChoiceGroup控件顯示的選項(xiàng)字符串,而參數(shù)“imageElements”則指定了相應(yīng)的圖片數(shù)組。

MIDP2.0中,ChoiceGroup新添加了一個(gè)設(shè)置選項(xiàng)字體的功能,使用setFont()函數(shù)可以設(shè)置ChoiceGroup選項(xiàng)的的字體。由于MIDP2.0提供的下拉列表控件與List屏幕的功能有點(diǎn)不一樣,它可以繼承ItemStateListener監(jiān)聽(tīng)接口,使用setItemStateListener()數(shù)設(shè)置GroupChoice控件的列表項(xiàng)的監(jiān)聽(tīng)器,在itemStateChanged()數(shù)中處理監(jiān)聽(tīng)事件。

ChoiceGroup

下面的例子展示了如何創(chuàng)建一個(gè)下拉列表類型的ChoiceGroup控件,選擇ChoiceGroup控件的某個(gè)選項(xiàng)以后,將在一個(gè)TextField控件中顯示提示選擇的信息,具體的代碼如下所示:importjavax.microedition.lcdui.*;importjavax.microedition.midlet.*;publicclassChoiceGroupDemoextendsMIDletimplementsCommandListener,ItemStateListener{ privatefinalstaticCommandexitCommand=newCommand("Exit",Command.EXIT,1); privateDisplaydisplay; privateFormmainForm; privateTextFieldtextfield; privateChoiceGroupgroup; publicChoiceGroupDemo(){ } protectedvoidstartApp(){ display=Display.getDisplay(this); mainForm=newForm("ChoiceGroup"); mainForm.append("Thesearetheavailablechoicegroup"); Image[]imageArray=null;ChoiceGroup

try{ Imageduke=Image.createImage("/Icon.png"); imageArray=newImage[]{duke,duke,duke,duke}; }catch(java.io.IOExceptionerr){ } String[]stringArray={"選項(xiàng)A","選項(xiàng)B","選項(xiàng)C","選項(xiàng)D"};group= newChoiceGroup("Pop-Up",ChoiceGroup.POPUP,stringArray,imageArray);textfield=newTextField("當(dāng)前選項(xiàng)為:","選項(xiàng)A",20,TextField.ANY); mainForm.append(group); mainForm.append(textfield); mainForm.addCommand(exitCommand); mainForm.setCommandListener(this); mainForm.setItemStateListener(this); display.setCurrent(mainForm); }ChoiceGroup

publicvoidcommandAction(Commandc,Displayabled){ if(c==exitCommand){ destroyApp(false); notifyDestroyed(); } } protectedvoiddestroyApp(booleanunconditional){ } protectedvoidpauseApp(){ } publicvoiditemStateChanged(Itemitem){ if(iteminstanceofChoiceGroup){ textfield.setString(group.getString(group.getSelectedIndex()));} }}ChoiceGroup

程序運(yùn)行以后的效果如圖所示,選擇了下拉列表項(xiàng)“選項(xiàng)B”以后,將在下面的TextField控件中出現(xiàn)“選項(xiàng)B”的提示信息。4.4.5DateField

MIDP提供了一個(gè)可以用來(lái)選擇時(shí)間和日期的DateField控件,使用這個(gè)控件可以很方便輸入時(shí)間和日期,DateField有2個(gè)構(gòu)造函數(shù),具體如下所示:DateField(Stringlabel,intmode)DateField(Stringlabel,intmode,TimeZonetimeZone)

其中,參數(shù)“l(fā)abel”指定了控件的標(biāo)題,參數(shù)“mode”指定了控件的類型,共有3種類型:DATE、TIME和DATE_TIME類型。這3種類型分別可以輸入日期、時(shí)間和日期時(shí)間。而參數(shù)“ti

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論