此方我是动画留下踪迹背后,任何人都可以明白为什么?(This square I'm anim

2019-09-17 10:13发布

谢谢你检查出这个问题。 我想我只是通过我在挫折头骨划伤。 因此,我所得到的是含有“的JPanel” A“的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*/
}

}

World.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;
}
}

这些都是我的所有文件。 我希望我已经正确措辞一切,提供所需的所有内容。 每当我已经做在过去,这从来没有发生过类似的事情。 我想我失去了一些东西小,或者我做了一些愚蠢的事。 如果你能帮助我,在此先感谢!

Answer 1:

有这样做的另一种方式。 你可以简单地调用父对象的paintComponent方法来清除面板。

将此添加到您的等级构造函数:

this.setBackground(Color.BLACK);

而本作中的paintComponent第一个电话:

super.paintComponent(g);


Answer 2:

您可以使用g.clearRect(X,Y,宽,高) ,并提供上述坐标,您要画从被清除。 或者你可以给整体的尺寸JPanel/JComponent你在哪里绘制,但这样做保持一件事记住,该说图纸是不是繁重的工作,否则,过多的清洗将投入额外负担画上调用。



文章来源: This square I'm animating is leaving a trail behind it, can anyone work out why?