程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2ME >> J2ME學習筆記(八)

J2ME學習筆記(八)

編輯:J2ME
今天買了2.5磅咖啡豆,星巴克的。有點點貴,用了599大洋,呵呵,偶爾奢侈一下也不為過嘛。剛剛磨了一杯咖啡,點上煙,呵呵,繼續開始J2ME的學習歷程。雖說今天星期六,可是估計今天看不了多少,明天要去公司加班,所以今天還是要早點休息。。。想想前幾個星期,soho的時候每天晚上就是我的工作時間,白天嘛。。嘿嘿,睡覺。。。那真是幸福呀。。。好日子不再咯。。。

呵呵,TextBox,好像看名字就知道干什麼的了,HTML裡面的輸入框。呵呵,感覺應該差不多。寫一個(和TextBox有相同使用方法的還有一個對象:TextFIEld,呵呵,感覺這個就是Html裡面的TextArea而已^_^)


測試程序先:

package com.graph;





/**

* @author You Li

*

* CopyRight (C) 2005 www.iguess.com.cn

*/

import Javax.microedition.midlet.*;

import Javax.microedition.lcdui.*;



public class TextBoxTest extends MIDlet implements CommandListener{



private Display display;

Command commit ;

public TextBoxTest() {

display = Display.getDisplay(this);

// TODO 自動生成構造函數存根

}



protected void startApp() throws MIDletStateChangeException {

// TODO 自動生成方法存根

commit = new Command("提交",Command.SCREEN,1) ;

TextBox tb = new TextBox("輸入框","default",12,TextFIEld.ANY) ;

tb.addCommand(commit) ;

tb.setCommandListener(this) ;

display.setCurrent(tb) ;

}



protected void pauseApp() {

// TODO 自動生成方法存根



}



protected void destroyApp(boolean arg0) throws MIDletStateChangeException {

// TODO 自動生成方法存根



}

public void commandAction(Command c,Displayable s){

TextBox tmp = (TextBox)s ;

System.out.println(tmp.getString()) ;

}

}






這個程序的功能是將屏幕上輸入的內容在後台打印出來。TextBox("輸入框","default",12,TextField.ANY),這個是用來設置對話框的屬性。我今天測試了一下,看了一下文檔,主要在最後兩個屬性,數字表示這個輸入框可以接受的最大字符數目,TextField.ANY-任意字元;TextField.EMAILADDR-接受Email地址;TextField.NUMERIC-只接受數字輸入;TextFIEld.PASSWord-輸入密碼;TextField.PHONENUMBER-輸入電話號碼,就是說可以接受數字,空格,星號,井號;TextField.URL-接受輸入的URL;TextFIEld.CONSTRAINT_MASK-用來和TextBox的getConstraints()方法所傳回的結果做AND邏輯運算,然後可以取得目前的限定設置。當然,這個參數不要在TextBox創建的時候使用。

呵呵,TextBox算是我學了這幾天最簡單最容易的東西了,呵呵,看來今天心情不錯,可能是星巴克的作用哦。呵呵。。。對了,說點題外話,喝咖啡的時候如果喜歡加入牛奶的話一定是咖啡到入牛奶,這樣咖啡裡面的牛奶香味更加淳厚^_^也是我的習慣,當然,我從來不放糖,我覺得那回破壞咖啡本來的酸味。休息的時候磨上一杯現磨的咖啡會讓你馬上覺得生活的優雅之處,也會讓你暫時遠離城市的煩惱。咖啡&煙,一個安靜的周末加上J2ME資料的相伴,感覺不錯:)

呵呵,扯遠了=_=!

再開始看看From咯,和Html裡面一樣,Form單獨存在是沒有任何意義的。它必須包含有Item類的子類才會有作用。

寫了一個Form的測試程序:

package com.graph;



import Javax.microedition.midlet.*;

import Javax.microedition.lcdui.*;



/**

* @author You Li

*

* CopyRight (C) 2005 www.iguess.com.cn

*/

public class FormTest extends MIDlet implements CommandListener,ItemStateListener {



private Display display;

Command commit ;

public FormTest() {

display = Display.getDisplay(this);

// TODO 自動生成構造函數存根

}



protected void startApp() throws MIDletStateChangeException {

// TODO 自動生成方法存根

commit = new Command("Commit",Command.SCREEN,1) ;

Form f = new Form("FormTest") ;

f.append("String 1") ;//相當於new StringItem(null,"String 1")

f.append("String 2") ;

f.append(new StringItem("Label 1 ","Content 2")) ;

f.append(new StringItem("Label 2 ","Content 2")) ;

f.addCommand(commit) ;

f.setCommandListener(this) ;

f.setItemStateListener(this) ;

display.setCurrent(f) ;

}



protected void pauseApp() {

// TODO 自動生成方法存根



}





protected void destroyApp(boolean arg0) throws MIDletStateChangeException {

// TODO 自動生成方法存根



}



public void commandAction(Command c, Displayable s) {

// TODO 自動生成方法存根

Form tmp = (Form) s ;

for(int i = 0;i < tmp.size(); i++){

StringItem si = (StringItem) tmp.get(i);

//get()方法取回值是Item類,所以需要強制轉化味StringItem類。

System.out.println(si.getText());

}

}



public void itemStateChanged(Item arg0) {

// TODO 自動生成方法存根



}

}

呵呵,基本上再程序裡面雖說沒有什麼注釋,但是整個StringItem本身並不是很復雜。所以也沒有過多的記錄。而ImageItem的使用與StringItem基本相同。它的構造方法是:

Append(new ImageItem(標志文字,Image對象,位置控制參數,替代文字));

ImageItem位置參數主要就是如下幾個咯:ImageItem.LAYOUT_DEFAULT;ImageItem.LAYOUT_LEFT;ImageItem.LAYOUT_RIGHT;ImageItem.LAYOUT_CENTER;ImageItem.LAYOUT_NEWLINE_BEFORE;ImageItem.LAYOUT_NELINE_AFTER



它的另外一個構造方法就是append(new Image());這個相當於調用了Append(new ImageItem(null,Image對象,ImageItem.LAYOUT_DEFAULT,null))來構造ImageItem對象。



ChoiceGroup,當Form與ChoiceGroup配合使用的時候就和再前面使用List一樣,因為ChoiceGroup和List一樣會為我們構建一個Choice選擇框。還是先看程序咯:

package com.graph;



/**

* @author You Li

*

* CopyRight (C) 2005 www.iguess.com.cn

*/

import Javax.microedition.midlet.*;

import Javax.microedition.lcdui.*;



public class ChoiceGroupTest extends MIDlet implements ItemStateListener {



private Display display;

public ChoiceGroupTest() {

display = Display.getDisplay(this);

// TODO 自動生成構造函數存根

}





protected void startApp() throws MIDletStateChangeException {

// TODO 自動生成方法存根

Form f = new Form("FormTest") ;

ChoiceGroup cg =new ChoiceGroup("ChoiceGroupTest",Choice.EXCLUSIVE);

//構建Choice的參數和List相比,除了IMPLICIT不可用外,EXCLUSIVE,IMPLICIT參數是可以用的

cg.append(" A ",null) ;

cg.append(" B ",null) ;

cg.append(" C ",null) ;

f.append(cg) ;

f.setItemStateListener(this) ;

display.setCurrent(f) ;

}



protected void pauseApp() {

// TODO 自動生成方法存根



}



protected void destroyApp(boolean b) throws MIDletStateChangeException {

// TODO 自動生成方法存根



}



public void itemStateChanged(Item item) {

// TODO 自動生成方法存根

ChoiceGroup tmp = (ChoiceGroup)item ;

System.out.println("Choice " + tmp.getSelectedIndex() + " selected") ;

}



}



所有的手機裡面我們都看到了一個調整音量的按鈕,這個按鈕實際上調用的GUI介面元素就是Gauge。Gauge的構造方法裡面有4個參數,第一個就是Gauge的標簽,第二個就是Gauge是否支持與用戶互動。剩下的兩個參數就是這個圖形的長度還寬度咯。

還是看看例子吧。呵呵,感覺像是例子編寫員一樣,這段時間寫這種例子寫了很多。但是也有很多好處,呵呵,至少讓我記住了不少東西。所以我建議兄弟們不要靠拷貝,粘貼來寫自己的代碼,最好這種學習階段就一行一行的寫。

package com.graph;



/**

* @author You Li

*

* CopyRight (C) 2005 www.iguess.com.cn

*/

import Javax.microedition.lcdui.*;

import Javax.microedition.midlet.*;

public class GaugeTest extends MIDlet implements ItemStateListener {



private Display display;

Gauge g1 ;

Gauge g2 ;

public GaugeTest() {

display = Display.getDisplay(this);

// TODO 自動生成構造函數存根

}



protected void startApp() throws MIDletStateChangeException {

// TODO 自動生成方法存根

Form f = new Form("FormTest") ;

g1 = new Gauge("Gauge1",true,200,100);

g2 = new Gauge("Gauge2",flase,200,100);

f.append(g1) ;

f.append(g2) ;

f.setItemStateListener(this) ;

display.setCurrent(f) ;

}



protected void pauseApp() {

// TODO 自動生成方法存根



}





protected void destroyApp(boolean arg0) throws MIDletStateChangeException {

// TODO 自動生成方法存根



}



public void itemStateChanged(Item item) {

// TODO 自動生成方法存根

Gauge tmp = (Gauge)item ;

if(tmp.getLabel().equals("Gauge2")){

g1.setValue(tmp.getValue()) ;

}

}



}



然後就是Form的另外一個對象,DateField。還是寫了一個比較簡單的時間調整。通過這個程序我們來看DateFIEld的各項屬性。

package com.graph;



/**

* @author You Li

*

* CopyRight (C) 2005 www.iguess.com.cn

*/

import Javax.microedition.midlet.*;

import Javax.microedition.lcdui.*;

import Java.util.* ;



public class DateFIEldTest extends MIDlet implements ItemStateListener {



private Display display;

public DateFIEldTest() {

display = Display.getDisplay(this);

// TODO 自動生成構造函數存根

}

protected void startApp() throws MIDletStateChangeException {

// TODO 自動生成方法存根

Form f = new Form("FormTest") ;

Date now = new Date() ;

DateFIEld df =

new DateField("DateField Test",DateFIEld.DATE_TIME) ;

df.setDate(now) ;

f.append(df) ;

f.setItemStateListener(this) ;

display.setCurrent(f) ;

}

protected void pauseApp() {

// TODO 自動生成方法存根



}

protected void destroyApp(boolean arg0) throws MIDletStateChangeException {

// TODO 自動生成方法存根

}

public void itemStateChanged(Item item) {

// TODO 自動生成方法存根

DateField tmp = (DateFIEld)item ;

Date d = tmp.getDate() ;

System.out.println(d.getTime()) ;

}

}



在初始化DateField的時候它有兩個屬性,第一個就是DateField的標簽,第二個就是輸入模式。MIDP一共為DateField提供了三種輸入模式。DateField.DATE_TIME,DateField.DATE;DateField.TIME。(ps:雖說有三種模式,不過因為一般情況下我們輸入都需要日期與具體時間都輸入,所以我在例子裡面也就是用的DateFIEld.DATE_TIME模式咯。)

然後還有最後一個比較重要的高級圖形處理事務,Ticker,這個類實現的效果就和Html裡面使用Javascript寫的一個跑馬燈程序效果差不多。

package com.graph;



/**

* @author You Li

*

* CopyRight (C) 2005 www.iguess.com.cn

*/

import Javax.microedition.midlet.*;

import Javax.microedition.lcdui.*;



public class TickerTest extends MIDlet implements CommandListener {



private Display display;

Command commit;

public TickerTest() {

display = Display.getDisplay(this);

// TODO 自動生成構造函數存根

}



protected void startApp() throws MIDletStateChangeException {

// TODO 自動生成方法存根

commit = new Command("Commit",Command.SCREEN,1) ;

TextBox tb = new

TextBox("Content","TickerTest",20,TextFIEld.ANY) ;

tb.setTicker(new Ticker("Ticker Test ...")) ;

tb.addCommand(commit) ;

tb.setCommandListener(this) ;

display.setCurrent(tb) ;

}



protected void pauseApp() {

// TODO 自動生成方法存根



}



protected void destroyApp(boolean arg0) throws MIDletStateChangeException {

// TODO 自動生成方法存根



}



public void commandAction(Command arg0, Displayable s) {

// TODO 自動生成方法存根

TextBox tmp = (TextBox)s ;

System.out.println(tmp.getString()) ;

}



}



可以使用Ticker的getString()方法取得跑馬燈中的文字,也可以通過setString()方法為跑馬燈設置文本內容。



MIDP中幾個重要的高級圖形處理元素差不多也就這麼多了。這幾天也把自己前幾天的學習筆記看了一下,總結了一下幾個做手持設備的開發的時候應該注意的方面。呵呵,也算是自己准備開始做實際開發的一個准備吧。

一、 手持設備畢竟不是PC,它的屏幕,電力供應,內存等等都很有限,所以我覺得在做實際開發的時候圖形介面還是應該已簡單為主,不應該過多的使用復雜的圖形介面。當然,呵呵,游戲除外。我說的是做應用程序開發的問題。

二、 盡量使用高級圖形處理元素,沒有特殊需要的時候這樣做有利於我們做平台移值。呵呵,至少在做一個程序的時候應該用高級圖形處理元素先完成基礎模塊的編寫,然後在根據實際機器的SDK適當的使用低級圖形處理元素。

三、 有輸入框的元素,為了方便應該使用TextFIEld.NUMBERIC等固定的輸入方式,以免用戶在使用的時候過多的按鍵盤進行字符元素轉化^_^

四、 好像還有個kAWT圖形處理包,個人不是很推薦使用。這個包實際就是awt的簡化版,在處理圖形的效率以及兼容性上還有一些問題。呵呵,如果不出更新版本我想最好還是不要使用咯。^_^

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved