Java 这个正方形是I';我在动画制作中留下了痕迹,有人能解释为什么吗?

Java 这个正方形是I';我在动画制作中留下了痕迹,有人能解释为什么吗?,java,swing,animation,paintcomponent,graphic,Java,Swing,Animation,Paintcomponent,Graphic,谢谢你检查这个问题。我想我只是在沮丧中勉强划破了脑袋。 所以我得到的是一个包含“JPanel”的“JFrame”。“JPanel”包含一个小的彩色正方形,每当我单击窗口时,它都会移动X像素 实际上,除了一个例外,所有的东西都会正常运转。当蓝色方块向右移动时,它会在后面留下其他方块的痕迹。它不应该离开踪迹,但是,当我重新调整窗口大小时,踪迹消失了 Catalyst.java package Prototype; import java.awt.*; public class Catalyst

谢谢你检查这个问题。我想我只是在沮丧中勉强划破了脑袋。 所以我得到的是一个包含“JPanel”的“JFrame”。“JPanel”包含一个小的彩色正方形,每当我单击窗口时,它都会移动X像素

实际上,除了一个例外,所有的东西都会正常运转。当蓝色方块向右移动时,它会在后面留下其他方块的痕迹。它不应该离开踪迹,但是,当我重新调整窗口大小时,踪迹消失了

Catalyst.java

package Prototype;

import java.awt.*;

public class Catalyst {

public static void main(String[] args){
    World theWorldInstance = new World("Prototype", 100,100, 600,100);  /*title,xpos,ypos,width,height*/
}

}
java

package Prototype;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class World extends JFrame  {

Level mainPanel;    

public World(String title, int x, int y, int width, int height) {

    setTitle(title);
    setBounds(x,y,width,height);
    setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    setBackground(new Color(0x00000000));
    initLevel();

}

public void initLevel(){
    mainPanel = new Level();
    Container visibleArea = getContentPane();
    visibleArea.add(mainPanel);
    setVisible(true);
    add(mainPanel);
}



}
Level.java

package Prototype;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Level extends JPanel implements MouseListener, ActionListener {
Square x;


public Level() {
    System.out.println("This is working correctly[JPANEL Cons]");
    addMouseListener(this);
    x = new Square();
}

public void paintComponent(Graphics g){
    x.draw(g);
}

public void actionPerformed(ActionEvent e){
}

public void mousePressed(MouseEvent e){
    requestFocus();
    x.move();
    repaint();
    System.out.println("Focus Acquired");


}

public void mouseClicked(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
}
Square.java

package Prototype;

import java.awt.*;

public class Square {

private Point position;
private int size;
private final int displacement;

public Square(){
    position = new Point(10,10);
    size = 20;
    displacement = 5;

}

public void draw(Graphics g){
    g.setColor(Color.blue);
    g.fillRect(position.x-(size/2), position.y-(size/2), size,size );
    g.setColor(Color.black);
    g.drawRect(position.x-(size/2), position.y-(size/2), size,size );

}

public void move() {
    position.x += displacement;
}
}

这些都是我的档案。我希望我已经恰当地表达了每件事,并提供了所需的所有内容。每当我在过去做过类似的事情时,这种情况就从未发生过。我想我错过了一些小事情,或者我做了一些愚蠢的事情。如果你能帮助我,请提前谢谢

您可以使用并提供所述坐标,您希望从中清除绘画。或者你可以给出你正在绘制的
JPanel/JComponent
的整体尺寸,尽管这样做需要记住一件事,即所述绘制不是一项繁重的工作,否则过多的清洁会给绘制调用带来额外的负担。

还有另一种方法。只需调用父对象的paintComponent方法即可清除面板

将其添加到级别中的构造函数:

this.setBackground(Color.BLACK);
这是paintComponent中的第一个调用:

super.paintComponent(g);

谢谢你给我的小费,我的朋友。然而,我才意识到我是直接在裸露的JPanel上画画的。如果我添加一张背景图片,或者一个环绕的黑色矩形来绘制,那么问题就会自行解决:D我非常感谢您的时间。非常欢迎您并保持微笑:-),请看这条线,所有这些都有很好的工作示例@Ewald:非常欢迎您并保持微笑:-)啊哈,这很有趣,我不知道这件事,或者你可以说从未尝试过:-)1 ThoughBeautive。朴素典雅。谢谢。我不能因此而受到赞扬,我在Swing教程的某个地方了解到了这一点——多年来帮我省去了一大堆麻烦。如果你有时间,请访问Oracle Swing教程,特别是Java 2D教程,其中有很多隐藏的宝石。