java 键盘事件可以读入组合键吗? 15

addKeyListener(newKeyAdapter(){publicvoidkeyPressed(KeyEvente){switch(e.getKeyCode())... addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
switch(e.getKeyCode()){
case KeyEvent.VK_DOWN: y += 10;break;
case KeyEvent.VK_UP: y-=10;break;
case KeyEvent.VK_LEFT: x-=10;break;
case KeyEvent.VK_RIGHT: x+=10;break;
}
}
});
上面的只能读入上下左右中的一个,我想要比如“上左”两个键组合,但是不知道怎么弄。请大家帮帮忙,谢谢
展开
 我来答
最后的雨季小冲
2016-01-18
知道答主
回答量:34
采纳率:0%
帮助的人:7.7万
展开全部

给后来的人看看吧,这个是方法已经测试过了可用;

Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() {

public void eventDispatched(AWTEvent event) {

if (((KeyEvent) event).getID() == KeyEvent.KEY_PRESSED) {

// 放入自己的键盘监听事件

// ((KeyEvent) event).getKeyCode();// 获取按键的code

// ((KeyEvent) event).getKeyChar();// 获取按键的字符

if (((InputEvent) event).isControlDown() && ((KeyEvent) event).getKeyCode() == 49) {

System.out.println("**");

}

System.out.println("" + event.getSource());

}

}

}, AWTEvent.KEY_EVENT_MASK);

百度网友9308069
2012-06-07 · TA获得超过1万个赞
知道大有可为答主
回答量:3947
采纳率:89%
帮助的人:1924万
展开全部
首先java通常上按键盘的硬件设计,只允许1个键作用,只有后按下的那个键会起作用。
只允许同时按下是修饰键alt, ctrl, shift,加一个键。

但你这个功能可以自己实现,
当UP键‘按下keypressed’事件时,用一个状态变量记录下来,up=true;
当UP键‘松开keypressed’事件时,用一个状态变量记录下来,up=false;
同理,也记录Left键的状态。left=true/false;以及记录上下左右所有控制键的状态。
统一在一处方法中根据‘自己记录的状态’来处理其他坐标等因素。
自己记录的上和左是按下的,就按上左处理,而不再以键盘响应码为判断依据。
追问
那switch语句怎么读入两个键的统一码?
追答
up down两个键的输入是有先和后的,不是同时输入。
但你就要自己另行记录这种状态。当前一个键没有松开release事件之前,
你的程序就假定认为2个键在同时按下,进程只管按按下的情况执行。比如坐标斜向移动。
一旦有一个键有release事件后,认为2个键同时按下的状态解除。
就需要自己设计一个状态记录和执行机制。.超越键盘监听器的低层框架。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友c131291
2012-06-08 · TA获得超过211个赞
知道小有建树答主
回答量:258
采纳率:0%
帮助的人:145万
展开全部
addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
switch(e.getKeyCode()){
case KeyEvent.VK_DOWN: y += 10;
case KeyEvent.VK_UP: y-=10;
case KeyEvent.VK_LEFT: x-=10;
case KeyEvent.VK_RIGHT: x+=10;
default : break;
}
}
});
其实把break放在default就行啦,前面就能把每个事件都遍历了再执行break,而前面的如果没输入也不会触发,这个break本来就是跳出switch用的,最简单的是把break都扔了-.-不过这不是好的习惯而已,下面就是了
addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
switch(e.getKeyCode()){
case KeyEvent.VK_DOWN: y += 10;
case KeyEvent.VK_UP: y-=10;
case KeyEvent.VK_LEFT: x-=10;
case KeyEvent.VK_RIGHT: x+=10;
}
}
});
更多追问追答
追问
可是如果像你说的那样的话,“下”和“左”就都作用不了了。因为如果按了“下”,还会经过下面那句case KeyEvent.VK_UP: y-=10;   那就是先加再减,那坐标就不会改变
追答
给你分析一下,然后你实践一次就明白了Switch break的道理了
先说明一下 case 后面的是触发条件,
如果KeyEvent.VK_DOWN成立,则进入KeyEvent.VK_DOWN后面的语句:y += 10;
如果不发生,则跳过KeyEvent.VK_DOWN:后面的语句,查看下一个触发条件是否成立;
另一方面,break语句是跳出switch:case循环的指令语句,在如果case KeyEvent.VK_DOWN成立
进入后面语句中带有break,如: y += 10; break;则在这里跳出了switch:case,不再遍历后面的语句;
对于你的意思推测一下:
你所说的情况是同是按了down和up才会发生,如果只按down和left,up语句不会的触发的哟~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式