调用repaint()而不会丢失以前的图形

时间:2014-02-24 01:04:27

标签: java graphics mouse paint super

我制作了一个小程序,需要先前的图形保持“放置”并且可见,即使在重新绘制导致变量位置发生变化之后也是如此。

    public void paint(Graphics g){
    super.paint(g);

    g.setColor(Color.red);
    g.fillOval(mouseLocX,mouseLocY,30,30);

}

这是我在paint类中的全部内容,我想更改mouseLocX和mouseLocY值,并在没有前一个位置的情况下调用repaint。我以前做过这个,大多数人都想要相反,但我忘了怎么做。我使用mouseDragged();

从MouseMotionListener调用重绘

1 个答案:

答案 0 :(得分:1)

如果你想保留已经绘制的内容,以便在鼠标移动时获得红色椭圆形而不是单个红色椭圆形,那么就不应该直接在paint()提供的Graphics对象上绘画。相反,使用BufferedImage来存储您的状态。然后将BufferedImage渲染到paint()提供的Graphic上。

private BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

public void paint(Graphics g) {
    super.paint(g);

    Graphics imageGraphics = image.getGraphics();
    imageGraphics.setColor(Color.red);
    imageGraphics.fillOval(mouseLocX,mouseLocY,30,30);

    g.drawImage(image, 0, 0, null);
}

BufferedImage为先前的绘制操作提供持久性。