Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 调用repaint()而不丢失上一个图形_Java_Graphics_Mouse_Paint_Super - Fatal编程技术网

Java 调用repaint()而不丢失上一个图形

Java 调用repaint()而不丢失上一个图形,java,graphics,mouse,paint,super,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,而不必在其中设置以前的位置

我正在制作一个小程序,它需要以前的图形保持“固定”和可见,即使在重新绘制导致可变位置改变之后也是如此

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

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

}

这就是我在paint类中拥有的所有内容,我想更改mouseLocX和mouseLocY值,并调用repaint,而不必在其中设置以前的位置。我以前做过这件事,大多数人的想法正好相反,但我忘了怎么做了。我正在使用mouseDragged()从MouseMotionListener调用repaint

如果要保留已绘制的内容,以便在鼠标移动时获得红色椭圆的轨迹,而不是单个红色椭圆,则不应直接在paint()提供的图形对象上绘制。相反,使用BuffereImage来存储您的状态。然后将BuffereImage渲染到paint()提供的图形上


BuffereImage为以前的绘制操作提供持久性。

你说的“以前的位置”是什么意思?根据您的代码片段,将绘制的唯一值是
mouseLocX
mouseLocY
的当前值…红色…哦,这就是问题的意思?现在说得通了;)
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);
}