清除Jframe上的图纸

时间:2014-04-18 22:43:57

标签: java swing graphics paintcomponent

我正在制作一个用鼠标移动方格的游戏,但是当我移动鼠标时,旧方块不会删除,这会产生一条方块。我希望它只有一个跟随我的鼠标的方格。这是我目前的代码。我已阅读使用paintcomponents但我不知道如何使用它,因为我还是初学者。

这是我的“GamePanel”课程

public void mouseMoved(MouseEvent m) {

        Graphics g= this.getGraphics();
        h.changeX(m.getX());
        h.changeY(m.getY());
        h.drawHero(g);

    }

这是我的“英雄”课程

public void drawHero(Graphics g){

        g.drawImage(heroPic,stX,stY,null); //heroPic is a picture I imported

2 个答案:

答案 0 :(得分:2)

不要使用this.getGraphics()。这是你绝对不想做的事情,因为它会产生伪影(正如你所提到的)。

最好将鼠标位置存储为变量,然后在调用paintComponent(Graphics)方法时处理所有渲染。一定要调用super.paintComponent(Graphics)来摆脱文物。

通常,您只应处理paintComponent(Graphics)方法内以及仅从paintComponent(Graphics)方法调用的任何方法中的图形。


以下是一个问题,涉及您应该避免Component#getGraphics()的原因:Drawing an object using getGraphics() without extending JFrame


以下是我回答围绕使用图形渲染的另一个问题:Java JFrame draw

答案 1 :(得分:0)

使用扩展JPanel的单独类:

class DrawPane extends JPanel {
 public void paintComponent(Graphics g) {
  super.paintComponent(g);
  g.drawImage(heroPic, x, y, this);

 }


}

然后创建一个将保存此类对象的变量:

DrawPane dp = new DrawPane();

之后将变量设置为contence窗格。 :

JFrame.setContencePane(dp);

现在重绘一下:

 dp.repaint();

不要担心' Graphics g'你不必输入任何东西。