在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())代码>您的解决方案有效。只有一个问题,图像背景是黑色的。我尝试设置图像背景和面板背景,但没有成功。请参见问题中的新实现。谢谢你的解决方案。只有一个问题,图像背景是黑色的。我尝试设置图像背景和面板背景,但没有成功。请参见问题中的新实现。谢谢