如何让我的自定义KeyListener
监听ALT
(或CTRL
)+多个其他键的组合?
假设我希望应用程序执行11个不同的操作,这取决于按下的键的组合。ALT + 0
- ALT + 9
显然不会带来任何问题,而对于ALT + 1 + 0
(或者可以在帮助文件中描述的"ALT+10“),我在web上(或者在我的头脑中)找不到一个好的解决方案。我不相信this solution with a timer是唯一可能的方法。
提前感谢你的任何建议!
编辑:操作0-9 +操作10 = 11个操作。感谢@X-Zero。
发布于 2011-10-21 23:19:29
您不应该使用KeyListener进行这种类型的交互。取而代之的是使用键绑定,您可以在Java Tutorial中了解到这一点。然后,您可以使用InputEvent遮罩来表示按下各种修改键的时间。例如:
// Component that you want listening to your key
JComponent component = ...;
component.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE,
java.awt.event.InputEvent.CTRL_DOWN_MASK),
"actionMapKey");
component.getActionMap().put("actionMapKey",
someAction);
有关获取KeyStroke时可以使用的不同代码,请参阅KeyStroke的javadoc。这些修饰符可以一起进行OR运算,以表示键的各种组合。比如
KeyStroke.getKeyStroke(KeyEvent.VK_SPACE,
java.awt.event.InputEvent.CTRL_DOWN_MASK
| java.awt.event.InputEvent.SHIFT_DOWN_MASK)
表示按下Ctrl + Shift
键的时间。
编辑:正如已经指出的,这并没有回答你的问题,而只是应该被当作一些好的建议。
发布于 2013-01-14 17:14:35
ALT +1+0(或在帮助文件或类似文件中描述的"ALT+10“)
似乎与(从你的一条评论中)冲突:
例如,如果用户想要更改第11列(将被称为"10")中的数据,他/他可以按
+1+同时按下ALT和10。
假设ALT+10的意思是“按下ALT,按下并释放1,按下并释放0,释放ALT”,我建议这样做:
在keyPressed中,侦听Alt键,激活一个布尔标志isAltPressed,并创建一个缓冲区来保存所发生的按键操作(比如字符串)。在keyTyped中,如果isAltPressed处于活动状态,则将密钥代码附加到缓冲区。在keyReleased中,再次侦听ALT,打开一个查询缓冲区并执行操作的条件。
public void keyPressed (KeyEvent e){
if (e.getKeyCode() == KeyEvent.VK_ALT){
buffer = ""; //declared globally
isAltPressed = true; } //declared globally
}
public void keyTyped (KeyEvent e){
if (isAltPressed)
buffer.append (e.getKeyChar());
}
public void keyReleased (KeyEvent e){
if (e.getKeyCode() == KeyEvent.VK_ALT){
isAltPressed = false;
if (buffer.equals (4948)) //for pressing "1" and then "0"
doAction();
else if (buffer.equals(...))
doOtherAction();
...
}//if alt
}
发布于 2015-11-07 11:43:30
import java.awt.*;
import java.awt.event.*;
class KDemo
{
public static void main(String args[])
{
Frame f = new Frame();
f.setSize(500,500);
f.setVisible(true);
f.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
AWTKeyStroke ak = AWTKeyStroke.getAWTKeyStrokeForEvent(e);
if(ak.equals(AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_F4,InputEvent.ALT_MASK)))
{
System.exit(0);
}
}
});
}
}
https://stackoverflow.com/questions/7851505
复制相似问题