Java KeyListener : How to perform an action when two keys are pressed?

标签 java swing keylistener key-events

请看下面的代码

import java.awt.event.*;
import javax.swing.*;
import java.awt.*;

public class KeyCheck extends JFrame
{
    private JButton check;
    private JPanel panel;
    private FlowLayout flow;

    public KeyCheck()
    {
        check = new JButton("Check");
        check.addKeyListener(new KeyWork());

        panel = new JPanel();
        panel.setLayout(new FlowLayout());
        panel.add(check);

        getContentPane().add(panel);

    }

    private class KeyWork extends KeyAdapter
    {
        public void keyPressed(KeyEvent k)
        {
            if(k.getKeyCode()==KeyEvent.VK_CONTROL && KeyEvent.VK_A)
            {
                JOptionPane.showMessageDialog(null, "OK");
            }
        }
    }
    public static void main(String[]args)
    {
        KeyCheck k = new KeyCheck();
        k.setVisible(true);
        k.setSize(200,200);
        k.validate();
        k.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

在这种情况下,我向按钮添加了一个按键列表,我需要它在同时按下 CTRL + A(控制键和“A”键)时显示消息“OK”。但是上面的代码是错误的。所以,请帮助我在同时按下两个键时收到消息。

最佳答案

你在混key code and modifiers :

 if(k.getKeyCode()==KeyEvent.VK_A 
     && (k.getModifiers & KeyEvent.CTRL_MASK==KeyEvent.CTRL_MASK))

但更一般地,最好使用KeyBindings而不是 KeyListener。这将使您的生活更轻松,并且避免您必须进行此类测试。

1.像这样创建一个 Action :

 public class MyAction extends AbstractAction {

     public void actionPerformed(ActionEvent e) {
          JOptionPane.showMessageDialog(null, "OK");
     }
 }

2.绑定(bind) Action 到击键:

check.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.CTRL_MASK), "doSomething");
check.getActionMap().put("doSomething", new MyAction());

警告:我还没有测试过这段代码,所以可能需要修复小故障。

关于Java KeyListener : How to perform an action when two keys are pressed?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10655010/

相关文章:

java - Ubuntu 中的 LookAndFeel 没有改变

java - JTextField Keylistener 无法删除输入

单击按钮后 Java setText 不更新

java - 在 JTree 中的行之间添加垂直填充/空间?

java - Android - 如何使选中一个复选框取消选中另一个?

java - 更改 JButton 焦点区域

java - addKeylistener() 不起作用

android - 关键监听器不适用于布局

java - 错误 :Execution failed for task ':app:transformClassesWithDexForDebug' .

java - 检测并从 JSON 对象中删除冗余节点,保存核心结构