1

我正在尝试设置一个 KeyListener 来触发 KeyPressed 和 KeyReleased。

当我按住一个键时,如果在按下后立即触发则释放,例如,如果我按住一个键,我会从每个事件的打印语句中获得以下输出:

Pressed Released Pressed Released Pressed Released Pressed Released

这是我的 KeyListener

import java.awt.Dimension;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;


public class EventListener extends JFrame implements KeyListener {

    public EventListener() {
        super();
        setSize(new Dimension(200, 300));
        addKeyListener(this);
        setVisible(true);

    }

    @Override
    public void keyTyped(KeyEvent e) {
    }

    @Override
    public void keyPressed(KeyEvent e) {
        System.out.println("Pressed");
    }

    @Override
    public void keyReleased(KeyEvent e) {
        System.out.println("Released");
    }



  }

有谁知道发生了什么?

4

1 回答 1

2

KeyEvent 是本地注册的。系统将发生变化。Windows 和 Mac 使用“中继器延迟”,它根据中继器数量每 n 毫秒重新发送一次 keyPressed 事件。Ubuntu 绕过了这一点,只是重新发送一个新事件,而不是重新发送同一个事件。

它应该对您的程序几乎没有影响,具体取决于发布时发生的情况。

于 2013-02-07T17:00:27.150 回答