eclipse Java JFrame按键似乎没有注册
我正在使用JavaAWT图形和JFrame来制作一个gui应用程序。我需要获得键输入,而keystener实现似乎没有工作,因为我的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) {
}
}
# 1 楼答案
尝试:
# 2 楼答案
KeyListener
存在与焦点相关的问题,在这方面不可靠,相反,您应该使用密钥绑定API,该API旨在帮助解决此问题有关更多详细信息,请查看How to Use Key Bindings