Java 为什么不是';我的矩形不是在我的JFrame中移动吗?

Java 为什么不是';我的矩形不是在我的JFrame中移动吗?,java,swing,jframe,keylistener,Java,Swing,Jframe,Keylistener,我向我的朋友演示了如何在JFrame中移动矩形,但现在我无法让它工作。我做错什么了吗?这是我的密码: import java.awt.Color; import java.awt.Graphics; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JComponent; import javax.swing.JFrame; @SuppressWarnings ("seri

我向我的朋友演示了如何在JFrame中移动矩形,但现在我无法让它工作。我做错什么了吗?这是我的密码:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JComponent;
import javax.swing.JFrame;

@SuppressWarnings ("serial")
public class TestClass extends JComponent implements KeyListener
{
    public static TestClass testClass = new TestClass();
    public int x = 250;

    public static void main (String[] args)
    {
        JFrame frame = new JFrame ("Test Frame");
        frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
        frame.setSize (600, 400);
        frame.setResizable (false);
        frame.getContentPane().setBackground (Color.WHITE);
        frame.getContentPane().add (testClass);
        frame.getContentPane().addKeyListener (testClass);
        frame.setVisible (true);
    }

    public void paintComponent (Graphics graphics)
    {
        super.paintComponent (graphics);
        graphics.setColor (Color.BLACK);
        graphics.fillRect (x, 150, 100, 100);
    }

    public void keyPressed (KeyEvent event)
    {
        if (event.getKeyCode() == KeyEvent.VK_LEFT)
        {
            x -= 10;
            repaint();
        }

        if (event.getKeyCode() == KeyEvent.VK_RIGHT)
        {
            x += 10;
            repaint();
        }
    }

    public void keyReleased (KeyEvent event) {}
    public void keyTyped (KeyEvent event) {}
}
我以前做过很多次;这很简单。我已经检查了我的代码很多,但在这里没有看到任何错误。我可能错过了一些愚蠢的事情。有什么帮助吗


另外,我知道键绑定更好,更重要。此程序仅用于演示。

可能是由于
KeyListener
和框架内容窗格的焦点问题

这就是为什么不应该使用
keystener
,而应该使用键绑定API的原因


有关更多详细信息,请参阅

我测试了您的代码,似乎这是侦听器分配的问题;添加这一行,您就可以开始了:

frame.addKeyListener(testClass);
“另外,我知道键绑定更好,而且更重要”-然后我建议您使用它,看看这是否能克服您的问题,而不是退回到有问题的方法…*“这个程序只是为了演示目的”*-所以您提供的代码不是给您带来问题的实际代码的表示??