从外部paintComponent()缓冲图像的Java绘图形状?

从外部paintComponent()缓冲图像的Java绘图形状?,java,swing,bufferedimage,graphics2d,Java,Swing,Bufferedimage,Graphics2d,这可能有人问过一点,但我需要帮助绘制形状。 因此,我有一个Draw类,它扩展了JPanel 我希望能够从paintComponent()外部绘制一个椭圆形方法。 因此,为了加载所有图像,我尝试将形状绘制到BufferedImage。 但是我没有一个合适的图形对象 所以我的问题是:我如何获得一个合适的图形对象来绘制到我的JPanel,或者如何在paintComponent方法中绘制并能够从另一个类调用它?通过getGraphics()从BuffereImage获取图形对象,或者通过createGr

这可能有人问过一点,但我需要帮助绘制形状。 因此,我有一个Draw类,它扩展了
JPanel

我希望能够从
paintComponent()外部绘制一个椭圆形方法。
因此,为了加载所有图像,我尝试将形状绘制到
BufferedImage
。 但是我没有一个合适的图形对象


所以我的问题是:我如何获得一个合适的图形对象来绘制到我的
JPanel
,或者如何在
paintComponent
方法中绘制并能够从另一个类调用它?

通过
getGraphics()
从BuffereImage获取图形对象,或者通过
createGraphics()获取Graphics2D对象
。然后,通过在其图形参数上调用drawImage,在paintComponent中绘制图像。
在创建BuffereImage的图形对象后,在使用完该对象后,请处理它。不要处理传递到paintComponent中的图形对象,因为是JVM创建的。

您可以通过
getGraphics()
从BuffereImage获取图形对象,或者通过
createGraphics()
从Graphics2D对象获取图形。然后,通过在其图形参数上调用drawImage,在paintComponent中绘制图像。 在创建BuffereImage的图形对象后,在使用完该对象后,请处理它。不要处理传递到paintComponent的图形对象,因为它是JVM创建的

我如何获得一个合适的图形对象来绘制到我的JPanel,或者如何在paintComponent方法内部绘制并能够从另一个类调用它

你没有。您不应该手动调用任何
paint
方法。当一个组件以这种方式绘制时,背景中会发生很多你无法控制的事情

如果要“打印”组件,则应使用
paintAll

BufferedImage img = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = img.createGraphics();
componentToBePrinted.printAll(g2d);
g2d.dispose();
另一种方法是使用
缓冲图像
并对其进行绘制

BufferedImage img = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = img.createGraphics();
g2d.setColor(Color.BLACK);
g2d.draw(new Rectangle2D.Double(10, 10, 80, 80));
g2d.draw(new Ellipse2D.Double(10, 10, 80, 80));
g2d.dispose();
然后,您可以让一个组件使用
Graphics\drawImage

我如何获得一个合适的图形对象来绘制到我的JPanel,或者如何在paintComponent方法内部绘制并能够从另一个类调用它

你没有。您不应该手动调用任何
paint
方法。当一个组件以这种方式绘制时,背景中会发生很多你无法控制的事情

如果要“打印”组件,则应使用
paintAll

BufferedImage img = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = img.createGraphics();
componentToBePrinted.printAll(g2d);
g2d.dispose();
另一种方法是使用
缓冲图像
并对其进行绘制

BufferedImage img = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = img.createGraphics();
g2d.setColor(Color.BLACK);
g2d.draw(new Rectangle2D.Double(10, 10, 80, 80));
g2d.draw(new Ellipse2D.Double(10, 10, 80, 80));
g2d.dispose();
然后,您可以让一个组件使用
Graphics\drawImage