首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >KeyListener如何检测组合键(例如,ALT +1+ 1)

KeyListener如何检测组合键(例如,ALT +1+ 1)
EN

Stack Overflow用户
提问于 2011-10-21 23:14:40
回答 4查看 53.9K关注 0票数 19

如何让我的自定义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。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-10-21 23:19:29

您不应该使用KeyListener进行这种类型的交互。取而代之的是使用键绑定,您可以在Java Tutorial中了解到这一点。然后,您可以使用InputEvent遮罩来表示按下各种修改键的时间。例如:

代码语言:javascript
复制
// 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运算,以表示键的各种组合。比如

代码语言:javascript
复制
KeyStroke.getKeyStroke(KeyEvent.VK_SPACE,
                       java.awt.event.InputEvent.CTRL_DOWN_MASK
                       | java.awt.event.InputEvent.SHIFT_DOWN_MASK)

表示按下Ctrl + Shift键的时间。

编辑:正如已经指出的,这并没有回答你的问题,而只是应该被当作一些好的建议。

票数 29
EN

Stack Overflow用户

发布于 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,打开一个查询缓冲区并执行操作的条件。

代码语言:javascript
复制
    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
    }
票数 2
EN

Stack Overflow用户

发布于 2015-11-07 11:43:30

代码语言:javascript
复制
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);
                   }
               }
           });
        }
   }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7851505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档