J2ME: 由用户自行设置键值
众所周知,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();}}