无法识别KeyListener的输入

时间:2016-06-06 12:42:54

标签: java input jframe jpanel keylistener

我正在创建一个需要键输入的低级游戏。因此,像往常一样,我导入了KeyListenerKeyEvent库。我创建了三个必需的方法:keyPressedkeyReleasedkeyTyped。然后我在类“testJPanel”中添加了keyListener,在keyPressed方法中,我创建了一个switch来检查是否按下了某个按钮。至于keyReleasedkeyTyped方法,我选择将它们留空/空白。对我来说,一切看起来都很精致,但是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) {
    }

}

2 个答案:

答案 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()。