2

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

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

任何答案表示赞赏!

编辑

我已经尝试过这个:

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

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

编辑

情况似乎收敛到这个解决方案:如果我的 JFrame 中有一个更大的重量级组件,所以它在 J​​ScrollPane 上呈现,那么就没有其他方法可以通过编程方式获取它的快照,然后用屏幕捕获滚动它/截屏?

4

4 回答 4

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

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

问候, 罗马

于 2009-05-18T11:17:30.190 回答
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 );
于 2008-12-02T01:30:10.417 回答
1

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

于 2009-08-13T10:27:43.667 回答
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;
于 2008-12-02T09:50:28.817 回答