我正在制作动画的这个方块在后面留下了痕迹,有人能找出原因吗?

2024-02-11

感谢您查看这个问题。我想我沮丧得几乎抓破了我的头骨。 所以我得到的是一个包含“JPanel”的“JFrame”。 “JPanel”包含一个小彩色方块,每当我单击窗口时,它就会移动 X 像素。

好吧,基本上一切都按其应有的方式运行,但有一个例外。当蓝色方块向右移动时,它会在后面留下其他方块的痕迹。它不应该留下痕迹,但是,当我重新调整窗口大小时,痕迹消失了。

催化剂.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);
}



}

级别.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) {}
}

方形.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;
}
}

这些都是我的文件。我希望我已经正确地表达了所有内容并提供了所需的所有内容。每当我过去做过类似的事情时,从来没有发生过这种情况。我想我错过了一些小事,或者我做了一些愚蠢的事情。如果您能帮助我,请提前致谢!


还有另一种方法可以做到这一点。您可以简单地调用父对象的paintComponent方法来清除面板。

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

this.setBackground(Color.BLACK);

这是paintComponent 中的第一个调用:

super.paintComponent(g);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我正在制作动画的这个方块在后面留下了痕迹,有人能找出原因吗? 的相关文章

随机推荐