Java 我的重画();不清除以前绘制的对象

Java 我的重画();不清除以前绘制的对象,java,graphics2d,Java,Graphics2d,您好,我正在编写一个简单的程序,让我可以在JFrame上移动一个矩形,我的问题是,与其移动矩形,不如画一个新的矩形,留下另一个,我不知道为什么会发生这种情况,我希望能得到一些帮助。这是我当前的绘图类代码: public class frameUpdater extends JPanel implements ActionListener { private Timer FPS; private int frameDelay = 40; private int xVal = 50; privat

您好,我正在编写一个简单的程序,让我可以在
JFrame
上移动一个矩形,我的问题是,与其移动矩形,不如画一个新的矩形,留下另一个,我不知道为什么会发生这种情况,我希望能得到一些帮助。这是我当前的绘图类代码:

public class frameUpdater extends JPanel implements ActionListener {

private Timer FPS;
private int frameDelay = 40;
private int xVal = 50;
private int yVal = 50;
private int SQUARE_SIZE = 30;

public frameUpdater() {
    FPS = new Timer(frameDelay, this);
    FPS.start();
}
@Override
public void paintComponent(Graphics g) {
    super.paintComponents(g);
    g.setColor(Color.GREEN);
    g.fillRect(xVal,yVal,SQUARE_SIZE,SQUARE_SIZE);


}

public void actionPerformed(ActionEvent e) {
    xVal += 5;
    repaint();
    System.out.println("updated");
}
}
这是我的主要课程代码:

public class mainEngine {

public static void main(String[] args) {
    int FRAME_WIDTH = 500;
    int FRAME_HEIGHT = 400;

    frameUpdater s = new frameUpdater();
    JFrame mainFrame = new JFrame();

    mainFrame.setBackground(Color.BLACK);
    mainFrame.add(s);
    mainFrame.setVisible(true);
    mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    mainFrame.setSize(FRAME_WIDTH,FRAME_HEIGHT);

}
非常感谢我能得到的任何帮助或提示

我的重画();不清除以前绘制的对象

始终查看您是否正确调用super的绘制方法,以及在发生类似情况时是否在正确的位置,因为您的绘制方法必须调用适当的super方法才能从图像中清除脏位,而您的方法不是:

@Override
public void paintComponent(Graphics g) {
    super.paintComponents(g);
应该是

@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g); // note difference?
我的重画();不清除以前绘制的对象

始终查看您是否正确调用super的绘制方法,以及在发生类似情况时是否在正确的位置,因为您的绘制方法必须调用适当的super方法才能从图像中清除脏位,而您的方法不是:

@Override
public void paintComponent(Graphics g) {
    super.paintComponents(g);
应该是

@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g); // note difference?