为什么我的JFrame中的矩形没有移动?

时间:2015-02-12 21:27:46

标签: 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 ("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) {}
}

我以前做了很多次;这很简单。我已经查看了我的代码,但是在这里看不到任何错误。我可能错过了一些愚蠢的东西。有什么帮助吗?

另外,我知道键绑定更好,更有用。该计划仅用于演示目的。

2 个答案:

答案 0 :(得分:2)

这可能是KeyListener的问题以及框架内容窗格的可聚焦性。

这就是为什么你不应该使用KeyListener而应该使用Key Bindings API。

有关详细信息,请参阅How to Use Key Bindings

答案 1 :(得分:1)

我测试了你的代码,看起来像是听众分配的一个问题;添加这一行,你就可以了:

frame.addKeyListener(testClass);