这可能有点问过,但我需要帮助绘制形状。
所以我的Draw类扩展了JPanel
。
我希望能够从paintComponent();
方法之外绘制一个椭圆。
因此,要加载我的所有图像,我尝试将形状绘制为BufferedImage
。
但我没有合适的图形对象。
所以我的问题是:我如何获得一个正确的Graphics对象来绘制到我的JPanel
,或者我如何在paintComponent
方法中绘制并能够从另一个类中调用它?
答案 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