週六清晨,我買了 2.5 磅星巴克咖啡豆,花了 599 元,算是給自己的一點小獎勵。磨好一杯濃郁的咖啡,點上煙,繼續 J2ME 的學習旅程。雖然是週末,但明天還得去公司加班,所以今晚得早點休息。想起前幾週 SOHO 時期,白天睡覺、晚上寫代碼,那才叫滋潤啊……好日子一去不復返了。
TextBox 顧名思義就是輸入框,類似 HTML 的 <input>;而 TextField 則對應 <textarea>。兩者用法幾乎相同,先來看一個簡單的測試程式:
package com.graph;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class TextBoxTest extends MIDlet implements CommandListener {
private Display display;
private Command commit;
public TextBoxTest() {
display = Display.getDisplay(this);
}
protected void startApp() {
commit = new Command("提交", Command.SCREEN, 1);
TextBox tb = new TextBox("輸入框", "default", 12, TextField.ANY);
tb.addCommand(commit);
tb.setCommandListener(this);
display.setCurrent(tb);
}
public void commandAction(Command c, Displayable s) {
TextBox tmp = (TextBox) s;
System.out.println(tmp.getString());
}
protected void pauseApp() {}
protected void destroyApp(boolean unconditional) {}
}
這個程式會將使用者輸入的內容在後台列印。TextBox 的建構子參數依序為:標題、預設值、最大字元數、限制模式。常見的限制模式包括:
TextField.ANY:任意字元TextField.EMAILADDR:電子郵件格式TextField.NUMERIC:僅數字TextField.PASSWORD:密碼輸入(顯示為星號)TextField.PHONENUMBER:電話號碼(數字、空格、*、#)TextField.URL:網址格式TextField.CONSTRAINT_MASK 則用於與 getConstraints() 配合,取得目前的限制設定,不適用於建構時。
Form 本身只是容器,必須包含 Item 子類別才有作用。常見的 StringItem、ImageItem 等皆可透過 append() 加入。範例:
Form f = new Form("FormTest");
f.append("String 1"); // 等同 new StringItem(null, "String 1")
f.append(new StringItem("Label 1", "Content 1"));
ImageItem 的建構子可指定標籤文字、Image 物件、版面參數(如 LAYOUT_LEFT、LAYOUT_CENTER 等)與替代文字。
ChoiceGroup 與 List 類似,支援 EXCLUSIVE(單選)、MULTIPLE(多選)模式,但不支援 IMPLICIT。搭配 ItemStateListener 可即時取得選取項目:
ChoiceGroup cg = new ChoiceGroup("測試", Choice.EXCLUSIVE);
cg.append("A", null);
cg.append("B", null);
f.append(cg);
f.setItemStateListener(this);
Gauge 可用於顯示進度或互動式滑桿(如音量控制)。建構子參數:標籤、是否可互動、最大值、初始值。範例中建立兩個 Gauge,第二個不可互動,並透過 itemStateChanged 同步第一個的值。
DateField 提供三種模式:DATE、TIME、DATE_TIME。實務上多使用 DATE_TIME 以利完整輸入。範例示範初始化為目前時間並監聽變更。
Ticker 可套用於任何 Displayable,效果類似網頁的跑馬燈。可透過 setString()、getString() 動態更新文字。
TextField.NUMERIC 可減少使用者按鍵切換麻煩。喝咖啡時若加牛奶,建議先倒咖啡再加牛奶,香氣更濃郁;我不加糖,以免破壞咖啡原本的酸韻。一杯現磨咖啡、一支煙、安靜的週末,配上 J2ME 代碼,生活竟也如此優雅。