捕获重量级的java组件?

时间:2008-12-02 01:21:33

标签: java user-interface screenshot jxbrowser

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

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

任何答案都赞赏!

修改

我已经尝试过这个:

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

但我希望捕获内部组件......

修改

这种情况似乎趋同于这个解决方案:如果我的JFrame中有一个更大的重量级组件,那么它在JScrollPane上呈现,那么就没有其他方法以编程方式获取它的快照然后滚动它/截屏它有screencapture吗?

4 个答案:

答案 0 :(得分:2)

我的名字是Roman,我是TeamDev的开发人员。

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

我们已经开始根据JxBrowser项目开发此功能。允许捕获包括其不可见部分的完整网页的解决方案基于Mozilla内部的东西。您将能够捕获完整的网页并将其保存为图像非常容易。

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

或者只是让我知道,我会在此功能可用时通知您。如果您有任何其他问题,请与我们联系。我很乐意提供帮助。

此致 罗马

答案 1 :(得分:1)

你的意思是编程?

怎么样?
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 );

答案 2 :(得分:1)

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

答案 3 :(得分:0)

您也可以尝试通过实现此功能来创建屏幕截图:

    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;