2008年(3500)
分类:
2008-05-04 20:33:03
适合接收按键的事件在个人所定义的按键范围内,MIDP应用为每一个按键事件分配一个按键码。按键数值码对每个按键来说都是唯一的,MIDP定义的按键码值为:KEY_NUM0、KEY_NUM1、KEY_NUM2、KEY_NUM3、KEY_NUM4、 KEY_NUM5、KEY_NUM6、KEY_NUM7、KEY_NUM8、KEY_NUM9、KEY_STAR和KEY_POUND (这些按键数值依据ITU-T电话按键规范制定)。分别定义出0~9与“×”及“#”“……”等按键。
l public static final int KEY_NUM0
l public static final int KEY_NUM1
ITU-T key按键编码为49。
l public static final int KEY_NUM2
ITU-T key按键编码为50。
l public static final int KEY_NUM3
ITU-T key按键编码为51。
l public static final int KEY_NUM4
ITU-T key按键编码为52。
l public static final int KEY_NUM5
ITU-T key按键编码为53。
l public static final int KEY_NUM6
ITU-T key按键编码为54。
l public static final int KEY_NUM7
ITU-T key按键编码为55。
l public static final int KEY_NUM8
ITU-T key按键编码为56。
l public static final int KEY_NUM9
ITU-T key按键编码为57。
l public static final int KEY_START
ITU-T key的“star”(×),按键编码为42。
l public static final int KEY_POUND
ITU-T key的“pound”(#),按键编码为35。
请注意,ITU-T的按键控制只能运用在手机所有可见的数字按键上,并不能控制象第四章介绍的高级用户界面的软键盘,这两者必须要区分清楚。
l public int getKeyName(int KeyCode)
取得单击按键的数字信息,也就是当玩家单击手机任何一个按键时,可由这个函数取得对应的按键数字。
l public protected void keyReleased
(int keyCode)
l public protected void keyPressed
(int keyCode)
当单击按键时调用。KeyCode为ITU-T的按键码。
l public protected void keyRepeated
(int keyCode)
当持续单击按键时调用。KeyCode为传入的ITU-T按键码,在按键过程中持续保持该参数值。本函数的应用要看手机
l public protected void
hasRepeatEvents()
判断是否支持持续按键动作。
示例6-1
/×
×/
import javax.microedition.midlet.×;
import javax.microedition.lcdui.×;
public class keyAction1 extends MIDlet implements CommandListener
{
Display display;
//声明一个List清单
List list;
Command okCommand;
//声明一个Canvas画板
canvasScreen canvasscreen;
public keyAction1()
{
canvasscreen=new canvasScreen();
display=Display.getDisplay(this);
//创建一个List清单,为IMPLICIT类型
list=new List("List按键控制", List.IMPLICIT);
//创建一个确认命令
okCommand = new Command("确认", Command.OK, 2);
//作为item选项加入List清单
list.append("ITU-T按键控制", null);
list.append("离开", null);
//将List清单加入到命令
list.addCommand(okCommand);
//运行将命令加入到List清单
list.setCommandListener(this);
}
public void startApp()
{
//显示清单List界面
display.setCurrent(list);
}
public void pauseApp(){}
public void destroyApp(boolean unconditional){}
public void commandAction(Command cmd, Displayable disp)
{
if (cmd == okCommand)
{
//判断清单软键盘运行的选项
switch(list.getSelectedIndex())
{
case 0:
//运行画板显示
display.setCurrent(canvasscreen);
break;
case 1:
destroyApp(false);
notifyDestroyed();
break;
}
}
}
class canvasScreen extends Canvas
{
String checkKey="";
String checkkeyName="";
Image handImage;
Image keyImage;
String[ ] maxString={"UP", "SOFT1", "LEFT", "SELECT", "RIGHT", "SOFT2", "DOWN",
"SEND", "CLEAR", "1", "2", "3", "4", "5", "6", "7", "8", "9",
"ASTERISK","0","POUND"
};
int[ ] maxisX={ 85, 40, 60, 85, 110, 130, 85, 30, 85, 35, 85, 135, 35, 85, 135, 35, 85, 135, 35, 85, 135
};
int[ ] maxisY={ 48, 55, 55, 55, 55, 55, 65, 70, 85, 95, 105, 95, 115, 125,115, 135, 145, 135, 155, 165, 155
};
public canvasScreen()
{
try{
handImage=Image.createImage("/hand.png");
keyImage=Image.createImage("/key.png");
}catch(Exception ex){}
}
//调用释放手机按键程序
public void keyReleased(int keyCode)
{
checkKey="release";
//判断释放按键所代表的ITU-T按键码
checkkeyName=getKeyName(keyCode);
//重新绘制Canvas的画板板面
repaint();
}
public void keyPressed(int keyCode)
{
checkKey="pound";
//判断单击按键所代表的ITU-T按键码
checkkeyName=getKeyName(keyCode);
//重新绘制Canvas的画板界面
repaint();
}
public void paint(Graphics g)
{
g.setColor(0xffffff);
g.fillRect(0,0,getWidth(),getHeight());
g.setColor(0);
g.drawString("按键状态:", 10, 20, Graphics.LEFT | Graphics.TOP);
if(checkKey.equals("release"))
g.drawString("释放的按键码为:" checkkeyName, 60, 20, Graphics. LEFT |
Graphics.TOP);
if(checkKey.equals("pound"))
g.drawString("单击的按键码为:" checkkeyName, 60, 20, Graphics. LEFT |
Graphics.TOP);
g.drawImage(keyImage, 15, 40,Graphics.LEFT | Graphics.TOP);
for(int i=0; i
g.drawImage(handImage, maxisX[i], maxisY[i], Graphics.LEFT | Graphics.TOP);
}
}
}
运行结果如图6-3所示。
图6-3
【说明】