我正在使用 Java AWT Graphics 和 JFrame 来制作 GUI 应用程序。我需要获取按键输入,并且 KeyListener 实现似乎不起作用,因为我的 System.out.println("hello") 似乎没有触发。我在互联网上的其他地方找不到这个问题的答案,所以我来到这里。
我正在使用 eclipse,它似乎没有为我提供与该问题相关的任何见解、错误、警告等,我对 Java 也很陌生,但我有包括 JavaScript 在内的高级语言的经验。
除了上述问题之外,应用程序按预期工作,将矩形从屏幕的左上角移动到右上角,甚至更远。
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
public class Main extends JPanel implements ActionListener, KeyListener{
static int WIDTH;
static int HEIGHT;
int x = 0;
int y = 0;
int targetFPS = 60;
int currentFPS = targetFPS;
Timer timer = new Timer(1000/targetFPS, this);
public Main(){
timer.start();
addKeyListener(this);
setFocusable(true);
setFocusTraversalKeysEnabled(false);
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.fillRect(x-25, y-25, 50, 50);
}
public static void main(String[] args){
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
WIDTH = (int) screenSize.getWidth();
HEIGHT = (int) screenSize.getHeight();
Main main = new Main();
JFrame frame = new JFrame();
frame.setTitle("Hello");
frame.setSize(WIDTH, HEIGHT);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(main);
}
@Override
public void actionPerformed(ActionEvent e) {
x++;
repaint();
}
@Override
public void keyPressed(KeyEvent e) {
int c = e.getKeyCode();
System.out.println("hello");
}
@Override
public void keyReleased(KeyEvent e) {
}
@Override
public void keyTyped(KeyEvent e) {
}
}
最佳答案
KeyListener
遇到与焦点相关的问题,在这方面,它是不可靠的,相反,您应该使用旨在帮助解决此问题的 Key Bindings API。
看看How to Use Key Bindings了解更多详情
关于Java JFrame - 按键似乎没有注册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37624804/