Java绘制形状从paintComponent()外部的bufferedImage?

时间:2018-05-20 01:31:14

标签: java swing bufferedimage graphics2d

这可能有点问过,但我需要帮助绘制形状。 所以我的Draw类扩展了JPanel

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

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

2 个答案:

答案 0 :(得分:3)

您可以通过getGraphics()从BufferedImage获取Graphics对象,或通过createGraphics()获取Graphics2D对象。然后,通过在Graphics参数上调用drawImage,在paintComponent中绘制图像。 在您创建它之后,在完成使用后处理BufferedImage的Graphics对象。自JVM成功以来,不要处理传递给paintComponent的Graphics对象。

答案 1 :(得分:2)

  

我如何获得一个正确的Graphics对象来绘制到我的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

对组件进行绘制