【发布时间】:2017-04-03 18:50:36
【问题描述】:
这是一个非常奇怪的问题,但我只是在 JPanel 中添加了一个简单的 keyListener,它会在 keyPressed 和 keyReleased 上打印。通常它可以正常工作,但是在某些键(例如“A”)上,如果我在释放之前按住,则在该释放之后没有其他键会触发 keyPressed,直到我按住某些键(例如“D”)。之后,除非我按下“坏”键并按住它太久,否则它会恢复正常。
最后一点,keyReleased 总是正确触发,只是 keyPressed 失败。
编辑2: 我已将代码简化为以下内容,它的行为仍如上文所述:
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
public class Test {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setSize(800, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.addKeyListener(new KeyListener() {
@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");
}
});
}
}
编辑: 代码摘录:
JFrame frame = new JFrame("test");
frame.setSize(WIDTH, HEIGHT);
frame.setLocationRelativeTo(null);
frame.setLayout(null);
frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
frame.setResizable(false);
JLayeredPane panel = new JLayeredPane();
panel.setBounds(0, 0, WIDTH, HEIGHT);
panel.setLayout(null);
frame.add(panel);
KeyListener listener = new KeyListener() {
public void keyTyped(KeyEvent e) {
System.out.println("typed: "+e.getKeyCode());
}
@Override
public void keyPressed(KeyEvent e) {
System.out.println("pressed: "+e.getKeyCode());
}
@Override
public void keyReleased(KeyEvent e) {
System.out.println("released: "+e.getKeyCode());
System.out.println();
}
};
panel.addKeyListener(listener);
frame.addKeyListener(listener);
frame.setVisible(true);
【问题讨论】:
-
请分享你的代码
-
也许其他东西在 Java 看到之前捕获了事件。你有粘滞键或类似的东西在运行吗?
-
您使用的是哪个操作系统?
-
我使用的是 Mac OS 10.12.2,所以没有粘滞键。它只发生在某些键上。我已将代码添加到问题中。
-
这似乎是一个类似的问题,但尚未得到回答:stackoverflow.com/questions/39705742/…
标签: java