最近在写一个j2me程序 其中包括一个数字输入的textfield 在手机上面实现的时候(s40模拟器)数字的输入很烦琐,所以想避开这种问题 于是改用低级界面实现:

// 定义一个StringBuffer用来保存输入的数字
private StringBuffer sb=new StringBuffer();

private int len=4; // 想输入的数字的长度
private int temp; // 取数字
protected void paint(Graphics g)
{
    g.setColor(WHITE);
    g.fillRect(0,0,getWidth(),getHeight());
    g.setColor(BLACK);
    g.drawString(sb.toString(),getWidth()/2,getHeight()/2,
            Graphics.TOP|Graphics.HCENTER); // 显示输入内容
}

protected void keyPressed(int keynum)
{
    if (sb.length()==len) // 开始键功能描述
    {
        switch (keynum)
        {
        case KEY_STAR:
            temp=Integer.parseInt(sb.toString()); // 得到了屏幕中输入的数字
            // 接下来自己可以利用数字按下*开始动能
            break;
        default:
            break;
        }
    }

    if (sb.length() {
        switch (keynum)
        {
        case KEY_NUM1:
            sb.append("1");
            break;
        case KEY_NUM2:
            sb.append("2");
            break;
        case KEY_NUM3: 
            sb.append("3");
            break;
        case KEY_NUM4:
            sb.append("4");
            break;
        case KEY_NUM5:
            sb.append("5");
            break;
        case KEY_NUM6:
            sb.append("6");
            break;
        case KEY_NUM7:
            sb.append("7");
            break;
        case KEY_NUM8:
            sb.append("8");
            break;
        case KEY_NUM9:
            sb.append("9");
            break;
        case KEY_NUM0:
            sb.append("0");
            break;
        default: break;
        }
    }

    if(sb.length()>0) // 退格键函数描述
    {
        if(keynum==KEY_POUND) sb.deleteCharAt(sb.length()-1);
    }
    repaint();
}
protected void keyReapeated(int keynum)
{
    if(sb.length()>0) // 长按一次性去除建函数描述
        if(keynum==KEY_POUND) sb=null;
}

注意:keyReapeated()方法JTWI 并未做硬性规定,所以我们在开发的时候一定要用Canvas.hasRepeatedEvents()方法来进行实际的侦测。