在Java画布中更新绘图

在Java画布中更新绘图,java,swing,awt,Java,Swing,Awt,我想制作一个可以在画布上绘制路径的应用程序。问题是我必须不断地更新这个画布 目前我可以这样做,但每次我都必须重新绘制所有路径,因此我必须将所有点存储在内存中。我更愿意简单地通过添加一个新点来更新绘图 可能吗 目前我的代码是: public class MyCanvas extends Canvas{ private static final long serialVersionUID = 1L; public MyCanvas(){} public

我想制作一个可以在画布上绘制路径的应用程序。问题是我必须不断地更新这个画布

目前我可以这样做,但每次我都必须重新绘制所有路径,因此我必须将所有点存储在内存中。我更愿意简单地通过添加一个新点来更新绘图

可能吗

目前我的代码是:

public class MyCanvas extends Canvas{
        private static final long serialVersionUID = 1L;
        public MyCanvas(){}
        public void paint(Graphics graphics){
            super.paint(graphics);
            graphics.setColor(Color.green);
            // points is an ArrayList of Point2D
            for (Iterator iterator = points.iterator(); iterator.hasNext();) {
               Point2D point2d = (Point2D) iterator.next();
               graphics.fillOval((int)((canvas.getWidth()/2.0) + point2d.getX()), (int)((canvas.getHeight()/2.0) + point2d.getY()), 5, 5);
            }   
        }
    }
谢谢

编辑

这是当前的解决方案:

PanelCanvas canvasPanel;
...
public void drawCircle(int x, int y){
    Graphics2D g2d = bufferedImage.createGraphics();
    g2d.setColor(Color.green);
    g2d.setBackground(Color.white);
    g2d.fillOval((int)((panelCanvas.getWidth() / 2.0) + x/10.0), (int)((panelCanvas.getHeight() / 2.0) + y/10.0), 5, 5);
    panelCanvas.repaint();
}

public class CanvasPanel extends JPanel{
    public void paintComponent(Graphics graphics){
        super.paintComponents(graphics);
        Graphics2D g2d = (Graphics2D)graphics;
        g2d.setBackground(Color.white);
        g2d.drawImage(bufferedImage, null, 0, 0);
    }
}
将点(无论什么)绘制到
缓冲区图像
。在
paint()
过程中,绘制
buffereImage


不过请注意,JRE可以在绘画中绘制数千个对象,而不会产生任何视觉瑕疵或减慢速度


画布嵌入在Swing GUI中。您对更换AWT.Canvas有什么建议

用于完全自定义渲染,用于与组件组合的自定义渲染。听起来
JComponent
更适合这个用例

对于这两种情况之一,重写
paintComponent(Graphics)
,而不是
paint(Graphics)
。其余的建议是相同的。

将点(无论什么)绘制到
缓冲区图像。在
paint()
过程中,绘制
buffereImage


不过请注意,JRE可以在绘画中绘制数千个对象,而不会产生任何视觉瑕疵或减慢速度


画布嵌入在Swing GUI中。您对更换AWT.Canvas有什么建议

用于完全自定义渲染,用于与组件组合的自定义渲染。听起来
JComponent
更适合这个用例


对于这两种情况之一,重写
paintComponent(Graphics)
,而不是
paint(Graphics)
。其余的建议都是一样的。

为什么在这个千年里,您要使用AWT组件进行编码?大多数使用过它们的人已经忘记了如何使用它们。另外,如果它是纯AWT,为什么要添加标签?问题中的问题..@andrewhompson画布嵌入到Swing GUI中。您对更换AWT.Canvas有什么建议?谢谢我希望避免在这个问题上使用特定的代码,但是。。为了更快地获得更好的帮助,发布一个@Andrew Thompson我通过绘制一个白色矩形来修复它:
g2d.fillRect(0,0,BuffereImage.getWidth(),BuffereImage.getHeight())为什么在这个千年中,您要使用AWT组件进行编码?大多数使用过它们的人已经忘记了如何使用它们。另外,如果它是纯AWT,为什么要添加标签?问题中的问题..@andrewhompson画布嵌入到Swing GUI中。您对更换AWT.Canvas有什么建议?谢谢我希望避免在这个问题上使用特定的代码,但是。。为了更快地获得更好的帮助,发布一个@Andrew Thompson我通过绘制一个白色矩形来修复它:
g2d.fillRect(0,0,BuffereImage.getWidth(),BuffereImage.getHeight())您的解决方案有效。只有一个问题,图像背景是黑色的。我尝试设置图像背景和面板背景,但没有成功。请参见问题中的新实现。谢谢你的解决方案。只有一个问题,图像背景是黑色的。我尝试设置图像背景和面板背景,但没有成功。请参见问题中的新实现。谢谢