众所周知,j2me的手机键值的处理是令人头痛的一件事,要使一个j2me应用适配所有的手机键盘简直是不可能完成的任务,要达到这个目的,唯一的途径是由用户自行设置键值。
以下提供一个用户设置键值的类,经测试效果不错。
public class GetKey extends Canvas{ private int fh; private int lastKey = 0; private Display display; private Displayable backScreen; private TextField setKey; public GetKey(TextField theSetKey){ fh = Font.getDefaultFont().getHeight() + 4; setKey = theSetKey; lastKey = Integer.parseInt(setKey.getString()); } public void show(Display theDisplay){ display = theDisplay; backScreen = display.getCurrent(); display.setCurrent(this); } protected void paint(Graphics g) { g.setColor(0); g.fillRect(0, 0, getWidth(), getHeight()); g.setColor(0xffffff); g.drawString("Press the key:", 2, fh*0, Graphics.TOP|Graphics.LEFT); g.drawString("press < to cancel,", 2, fh*1, Graphics.TOP|Graphics.LEFT); g.drawString("press > to save.", 2, fh*2, Graphics.TOP|Graphics.LEFT); g.setColor(0xff0000); g.drawString(String.valueOf(lastKey), getWidth()/2, getHeight()/2, Graphics.HCENTER|Graphics.TOP); } // 响应按键 protected void keyPressed(int keyCode) { if (keyCode <= 0) { int gameAction = getGameAction(keyCode); if (gameAction != 0) { keyCode = gameAction; } } switch(keyCode){ case Canvas.RIGHT: setKey.setString(String.valueOf(lastKey)); case Canvas.LEFT: display.setCurrent(backScreen); return; default: lastKey = keyCode; } repaint(); serviceRepaints(); } }
注意其中的关键是要在构建函数中传入用于保存用户所设按键的TextField!
更正:应设为全屏,否则有一些键可能读不到!
1 楼 Saito 2009-05-26
如果你设置键值的那几个键都不支持怎么办. 那还不是不能设置?
2 楼 iwinyeah 2009-05-26
Saito 写道
如果你设置键值的那几个键都不支持怎么办. 那还不是不能设置?
我不太明白你的意思,如果是指保存设置的左右方向键的话,是所有手机都实现了的。
3 楼 iwinyeah 2009-05-26
而且你也不大可能使用方向键去实现与方向无关的功能吧
4 楼 Saito 2009-05-26
假设. 我的手机要使用你的 游戏 ..
那照你的程序. 我就必须首先进入游戏. 然后进入设置键位栏目..
那万一我连设置键位那栏都进不去呢. 比如说我的方向键 下 . 不支持. 怎么办?
那照你的程序. 我就必须首先进入游戏. 然后进入设置键位栏目..
那万一我连设置键位那栏都进不去呢. 比如说我的方向键 下 . 不支持. 怎么办?
5 楼 iwinyeah 2009-05-26
找这样一个手机给我看看(这意味着手机不支持TextField,Command,Form...,那它还可以说自己支持j2me吗?)
6 楼 Saito 2009-05-26
iwinyeah 写道
找这样一个手机给我看看(这意味着手机不支持TextField,Command,Form...,那它还可以说自己支持j2me吗?)
我手机玩Gameloft的游戏 经常摇杆的下 键不能使.
7 楼 iwinyeah 2009-05-26
Saito 写道
iwinyeah 写道
找这样一个手机给我看看(这意味着手机不支持TextField,Command,Form...,那它还可以说自己支持j2me吗?) 我手机玩Gameloft的游戏 经常摇杆的下 键不能使.

8 楼 Saito 2009-05-26
iwinyeah 写道
Saito 写道
iwinyeah 写道
找这样一个手机给我看看(这意味着手机不支持TextField,Command,Form...,那它还可以说自己支持j2me吗?)&nbsp; 我手机玩Gameloft的游戏 经常摇杆的下 键不能使.
对不起,这里不负责修理手机


9 楼 iwinyeah 2009-05-26
Saito 写道
iwinyeah 写道
Saito 写道iwinyeah 写道找这样一个手机给我看看(这意味着手机不支持TextField,Command,Form...,那它还可以说自己支持j2me吗?)&amp;nbsp; 我手机玩Gameloft的游戏 经常摇杆的下 键不能使. 对不起,这里不负责修理手机 是键位不对. 不是我手机坏了
牛皮灯笼啊,你要使用高级UI来设置!
public void commandAction(Command cmd, Item item) { if(item == uiMenuKey){ GetKey keyCanvas = new GetKey((TextField)item); keyCanvas.show(controler.getDisplay()); } }