首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2ME

J2ME 低階 UI 實作數字輸入:繞過 TextField 限制

     編輯:J2ME

前言

高階 UI TextField 在 S40 模擬器上數字輸入繁瑣,改用低階 Canvas 直接處理按鍵事件,實作簡易數字輸入框。

核心程式碼

public class NumberInputCanvas extends Canvas {
    private StringBuffer input = new StringBuffer();
    private final int MAX_LEN = 4;  // 輸入長度限制
    private int parsedValue;        // 解析後的數值

    protected void paint(Graphics g) {
        g.setColor(0xFFFFFF);
        g.fillRect(0, 0, getWidth(), getHeight());
        g.setColor(0x000000);
        g.drawString(input.toString(),
                     getWidth()/2, getHeight()/2,
                     Graphics.TOP | Graphics.HCENTER);
    }

    protected void keyPressed(int keyCode) {
        // 已達最大長度,只處理確認鍵 (*) 與刪除鍵 (#)
        if (input.length() == MAX_LEN) {
            switch (keyCode) {
                case KEY_STAR:  // 確認
                    parsedValue = Integer.parseInt(input.toString());
                    // TODO: 觸發後續邏輯
                    break;
                case KEY_POUND: // 刪除
                    input.deleteCharAt(input.length()-1);
                    break;
            }
            repaint();
            return;
        }

        // 未滿長度,處理數字鍵 0-9
        if (input.length() < MAX_LEN) {
            char c = 0;
            switch (keyCode) {
                case KEY_NUM0: c = '0'; break;
                case KEY_NUM1: c = '1'; break;
                case KEY_NUM2: c = '2'; break;
                case KEY_NUM3: c = '3'; break;
                case KEY_NUM4: c = '4'; break;
                case KEY_NUM5: c = '5'; break;
                case KEY_NUM6: c = '6'; break;
                case KEY_NUM7: c = '7'; break;
                case KEY_NUM8: c = '8'; break;
                case KEY_NUM9: c = '9'; break;
            }
            if (c != 0) input.append(c);
        }

        // 長度>0 時,# 鍵刪除最後一字
        if (input.length() > 0 && keyCode == KEY_POUND) {
            input.deleteCharAt(input.length()-1);
        }
        repaint();
    }

    // 長按 # 鍵一次性清空 (視裝置支援而定)
    protected void keyRepeated(int keyCode) {
        if (input.length() > 0 && keyCode == KEY_POUND) {
            input.setLength(0);
            repaint();
        }
    }
}

關鍵點提醒

  • keyRepeated() 非 JTWI 強制規範,使用前必須用 Canvas.hasRepeatedEvents() 檢測裝置是否支援。
  • 按鍵碼 (KEY_NUM0 等) 為 Canvas 定義常數,跨裝置一致性較好。
  • 可擴充支援編輯游標、負號、小數點等進階功能。

結語

低階 UI 雖需自行處理繪製與邏輯,但能完全掌控輸入體驗,繞過高階元件限制,適合簡單數字輸入場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved