這是一個非常奇怪的問題,但我只是將一個簡單的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