-->

Java的KeyListener的:如何当按下两个键进行操作?(Java KeyListener:

2019-09-17 07:50发布

请看看下面的代码

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);
    }
}

在这种情况下,我已经添加一个keylister到按钮,我需要它时被按下CTRL + A一起(控制键和“A”键)来显示消息“OK”。 但上面的代码是错误的。 所以,请帮助我,当两个键被压在一起,得到的消息。

Answer 1:

你是混合键代码和修饰符 :

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

但更普遍的,它是更好地使用键绑定 ,而不是KeyListener的。 它将使你的生活轻松了许多,并避免你将不得不作出的一种测试。

1.创建一个这样的动作:

 public class MyAction extends AbstractAction {

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

2.Bind的动作击键:

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

注意事项:我没有测试此代码,所以可能要解决小故障。



Answer 2:

您应该使用在事件方法k

if(k.isControlDown() && k.getKeyCode() == KeyEvent.VK_A) {

但请记住,当你的按钮集中,这只会工作。 例如,当您添加JTextField到您的frame ,并写一些东西- Ctrl+A ,因为将无法正常工作JTextField集中。



Answer 3:


        public void keyPressed(KeyEvent k)
        {
            if(k.getKeyCode() == KeyEvent.VK_A && (k.getModifiers & KeyEvent.CTRL_MASK) != 0)
            {
                JOptionPane.showMessageDialog(null, "OK");
            }
        }
    }


Answer 4:

您还可以使用键助记符或促进剂,它是非常简单的:1.口诀将打开一个菜单2.加速器会按下相应的菜单按钮

JMenuItem combination = new JMenuItem("Save File");
combination.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.CTRL_MASK));
        combination.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (e.getSource() == find) {
                System.out.println("Ctrl+S pressed");
savefile();//depending on what your saving code is                    
                }

            }
        });


文章来源: Java KeyListener: How to perform an action when two keys are pressed?