2008-12-02 27 views
2

我有一個桌面應用程序在JFrame中有重量級組件(JxBrowser)。如何從GUI創建快照並將其保存爲例如png文件?捕獲重量級的java組件?

注意:使用Graphics2d和Component.paint()/ paintAll()/ print/printAll的方法僅適用於輕量級組件。

任何答案讚賞!

編輯

我已經嘗試過這樣的:

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

但我想內部成分被捕獲...

編輯

的情況似乎融合到這個解決方案:如果我有一個更大的重量級組件在我的JFrame中,所以它呈現在JScrollPane上,然後沒有其他方法以編程方式獲得它的快照,然後使用screencapture滾動/截取它?

回答

2

我的名字是羅馬和我是TeamDev的開發人員。

JxBrowser組件它是一個嵌入本地mozilla窗口以顯示網頁的重量級組件。要從JxBrowser組件獲取完整網頁的屏幕截圖,您可以真正在網頁滾動中使用Java Robot功能。對於小型網頁這個解決方案是好的。但是,接收大型網頁的截圖將需要很長時間。另請注意,Java Robot允許只捕獲屏幕。所以如果某個窗口會出現在JxBroser組件上,那麼它也會被捕獲。

我們已經開始在JxBrowser項目方面開展這項功能的研究。該解決方案將允許捕獲包括其不可見部分的完整網頁,並基於Mozilla的內部資料。您將能夠捕捉完整的網頁並將其保存爲圖像,非常簡單。

我們將在下一個JxBrowser庫版本中添加此功能,但發佈日期尚未定義。如果你希望你可以訂閱TeamDev的RSS feed:http://support.teamdev.com/blogs/feeds/tags/company_news

或者只是讓我知道,我會通知你,當這個功能將可用。如果您還有其他問題,請告訴我。我很樂意提供幫助。

問候, 羅馬

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); 
+0

@Pato:我已經改變了答案,並將您的評論置於您的問題中。行! – OscarRyz 2008-12-02 01:50:05

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; 
1

JxBrowser API提供的功能允許保存整個網頁爲PNG圖像。請參閱sample