当前位置: 代码迷 >> J2ME >> J2ME: 由用户自行设立键值
  详细解决方案

J2ME: 由用户自行设立键值

热度:8938   发布时间:2013-02-25 21:32:28.0
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();	}	}


注意其中的关键是要在构建函数中传入用于保存用户所设按键的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吗?)&nbsp; 我手机玩Gameloft的游戏 经常摇杆的下 键不能使.

对不起,这里不负责修理手机
8 楼 Saito 2009-05-26  
iwinyeah 写道

Saito 写道
iwinyeah 写道
找这样一个手机给我看看(这意味着手机不支持TextField,Command,Form...,那它还可以说自己支持j2me吗?)&amp;nbsp; 我手机玩Gameloft的游戏 经常摇杆的下 键不能使.

对不起,这里不负责修理手机

   是键位不对. 不是我手机坏了
9 楼 iwinyeah 2009-05-26  
Saito 写道

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


牛皮灯笼啊,你要使用高级UI来设置!

	public void commandAction(Command cmd, Item item) {		if(item == uiMenuKey){			GetKey keyCanvas = new GetKey((TextField)item);			keyCanvas.show(controler.getDisplay());		}	}