Java JFrame - 按键似乎没有注册

标签 java eclipse swing graphics jframe

我正在使用 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/

相关文章:

java - Eclipse 找不到主要方法

java - 如何为框架设置彩色背景?

Java Swing 线程改变 UI - 并发症

java - 如何在Java中映射Paint中的颜色数组?

java - 如何从jsp更新查询?

java - JMS onMessage() 和并发

Java,创建 JComboBox 并添加到年份范围

java - 为什么不同的android版本显示不同的GUI?

Javamail 和 gmail,获取 "PKIX path building failed"

Java exec方法不执行程序