JTextfield应触发所有键盘输入

时间:2013-02-04 12:37:44

标签: java swing keyboard jtextfield keylistener

我想在JTextField中触发所有键盘输入(也包括strg,alt和tab)。

super.addKeyListener(new KeyListener() {

    @Override
    public void keyTyped(KeyEvent arg0) {
        System.out.println(arg0.getKeyChar());
    }

    @Override
    public void keyReleased(KeyEvent arg0) {

    }

    @Override
    public void keyPressed(KeyEvent arg0) {

    }
});

KeyListener不会触发strg,alt或/和tab等键盘输入。

这种情况有解决方案吗?

我需要这个用于设置屏幕,用户可以在其中更改键,必须按下该键才能继续前进。

1 个答案:

答案 0 :(得分:1)

这适用于我,我必须禁用遍历才能捕获Tab密钥。 另请注意,永远不会为keyTyped()AltShift等密钥调用Control事件。 但是,当您使用keyPressed()keyReleased()事件时,您可以抓住它们:

public class Scribble extends JFrame implements KeyListener {

    public Scribble(){
        this.setLayout(new BorderLayout());
        JTextField field = new JTextField();
        field.addKeyListener(this);
        /*
         * Disable tab, so we can catch it
         */
        field.setFocusTraversalKeysEnabled(false);
        this.add(field, BorderLayout.CENTER);
        this.pack();
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLocationRelativeTo(null);
        this.setVisible(true);
    }

    public void keyTyped(KeyEvent e) {
        System.out.println("Key typed: " + e.getKeyCode());
    }

    public void keyPressed(KeyEvent e) {
        System.out.println("Key pressed: " + e.getKeyCode());
    }

    public void keyReleased(KeyEvent e) {
        System.out.println("Key released: " + e.getKeyCode());
    }

    public static void main(String[] args) {
        new Scribble();
    }
}