捕获重量级的java组件?

问题描述:

我有一个桌面应用程序在JFrame中有重量级组件(JxBrowser)。如何从GUI创建快照并将其保存为例如png文件?捕获重量级的java组件?

注意:使用Graphics2d和Component.paint()/ paintAll()/ print/printAll的方法仅适用于轻量级组件。

任何答案赞赏!

编辑

我已经尝试过这样的:

robot.createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize())); 

但我想内部成分被捕获...

编辑

的情况似乎融合到这个解决方案:如果我有一个更大的重量级组件在我的JFrame中,所以它呈现在JScrollPane上,然后没有其他方法以编程方式获得它的快照,然后使用screencapture滚动/截取它?

我的名字是罗马和我是TeamDev的开发人员。

JxBrowser组件它是一个嵌入本地mozilla窗口以显示网页的重量级组件。要从JxBrowser组件获取完整网页的屏幕截图,您可以真正在网页滚动中使用Java Robot功能。对于小型网页这个解决方案是好的。但是,接收大型网页的截图将需要很长时间。另请注意,Java Robot允许只捕获屏幕。所以如果某个窗口会出现在JxBroser组件上,那么它也会被捕获。

我们已经开始在JxBrowser项目方面开展这项功能的研究。该解决方案将允许捕获包括其不可见部分的完整网页,并基于Mozilla的内部资料。您将能够捕捉完整的网页并将其保存为图像,非常简单。

我们将在下一个JxBrowser库版本中添加此功能,但发布日期尚未定义。如果你希望你可以订阅TeamDev的RSS feed:http://support.teamdev.com/blogs/feeds/tags/company_news

或者只是让我知道,我会通知你,当这个功能将可用。如果您还有其他问题,请告诉我。我很乐意提供帮助。

问候, 罗马

你的意思是编程?

什么

Point p = yourAwtComponent.getLocationOnScreen(); 
int w = yourAwtComponent.getWidth(); 
int h = yourAwtComponent.getHeight(); 

Rectangle rectangle = new Rectangle(p.x, p.y, w, h); 

Image image = robot.createScreenCapture(rectangle); 

然后是这样的:

ImageIO.write(image, "png", file); 
+0

@Pato:我已经改变了答案,并将您的评论置于您的问题中。行! – OscarRyz 2008-12-02 01:50:05

您还可以尝试通过执行这一创建截图:

int width = frameContainer.getWidth(); 
    int height = frameContainer.getHeight(); 

    BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 
    Graphics2D g2 = image.createGraphics(); 

    frameContainer.paint(g2); 

    return image; 

JxBrowser API提供的功能允许保存整个网页为PNG图像。请参阅sample