这是一个非常奇怪的问题,但我只是将一个简单的keyListener添加到在keyPressed和keyReleased上打印的JPanel。通常它可以正常工作,但对于某些按键(如“A”),如果在释放之前按住按钮,在释放之后没有其他按键会触发按键,直到按住某些按键(如“D”)。之后,除非按下“坏”键并保持太久,否则它会恢复正常。在mac上,在Java中,keyPressed事件不会触发某些键
最后一个注意事项,keyReleased总是触发正常,它只是keyPressed失败。
EDIT2: 我已经简化以简化以下的代码,它仍然表现为如上所述:
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看到它之前捕获事件。你有没有粘键或类似的运行? – ingyhere
您正在使用哪种操作系统? – Felix