Java绘制形状到缓冲图像来自外部paintComponent()?



这可能已经被问了一点,但我需要绘制形状的帮助。 所以我有我的 Draw 类,它扩展了JPanel.

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

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

您可以通过getGraphics()从 BufferedImage 获取图形对象,或通过createGraphics()从 Graphics2D 对象获取。然后,通过在 paintComponent 的图形参数上调用 drawImage 来绘制图像。 在创建缓冲区图像的图形对象后,请释放它。不要释放传递给paintComponent的Graphics对象,因为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并为其绘画......

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绘制它

最新更新