我正在创建一个需要键输入的低级游戏。因此,像往常一样,我导入了KeyListener
和KeyEvent
库。我创建了三个必需的方法:keyPressed
,keyReleased
,keyTyped
。然后我在类“testJPanel”中添加了keyListener
,在keyPressed
方法中,我创建了一个switch
来检查是否按下了某个按钮。至于keyReleased
和keyTyped
方法,我选择将它们留空/空白。对我来说,一切看起来都很精致,但是Java
似乎不想注册我的键盘输入:当我按向上箭头键时,程序应该打印“测试”,但遗憾的是,它不会。为什么?任何和所有的帮助将不胜感激。
testJFrame.java
import java.awt.Color;
import javax.swing.JFrame;
public class testJFrame extends JFrame {
public testJFrame() {
setTitle("A test application");
setSize(500, 500);
setBackground(Color.black);
setResizable(false);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
setFocusable(true);
add(new testJPanel());
}
public static void main(String[] args) {
testJFrame testJFrame = new testJFrame();
}
}
testJPanel.java
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JPanel;
import javax.swing.Timer;
public class testJPanel extends JPanel implements KeyListener, ActionListener {
public testJPanel() {
Timer timer = new Timer(15, this);
timer.start();
addKeyListener(this);
}
public void update() {
}
@Override
public void actionPerformed(ActionEvent a) {
update();
}
@Override
public void keyPressed(KeyEvent k) {
switch(k.getKeyCode()) {
case KeyEvent.VK_UP:
System.out.println("Test");
}
}
@Override
public void keyReleased(KeyEvent k) {
}
@Override
public void keyTyped(KeyEvent k) {
}
}
答案 0 :(得分:1)
你需要让JPanel成为焦点:
$(document).on('ready turbolinks:change turbolinks:load', function() { });
此外,如果您只想使用KeyListener中的keyPressed方法()。您可以改为使用KeyAdapter类:
testPanel.setFocusable(true);
testPanel.requestFocusInWindow();
答案 1 :(得分:0)
您的面板必须具有焦点,并且必须具有焦点才能重现KeyEvent。添加
setFocusable(true);
到你的面板构造函数并像这样更改你的testFrame构造函数
testPanel = new testJPanel();
add(testPanel);
testPanel.requestFocusInWindow();
在添加面板后必须调用requestFocusInWindow()。