回答
從您可以創建BufferedImage的圖形對象,你可以用它來調用JPanel的油漆,喜歡的東西:
public BufferedImage createImage(JPanel panel) {
int w = panel.getWidth();
int h = panel.getHeight();
BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
Graphics2D g = bi.createGraphics();
panel.paint(g);
return bi;
}
您可能需要確保先設置面板的大小。
不錯,謝謝。有沒有一種方法可以找出面板尺寸應該是什麼(可能是它的首選尺寸)? – 2009-08-28 20:49:26
我相信這是首選尺寸或當前尺寸,只要它已經被渲染。如果它還沒有被渲染就會出現問題 - 我不記得確切的細節,但我記得在實現打印系統時遇到類似的屬性。 – aperkins 2009-08-28 20:59:46
是的,首選大小的作品,但正如你所說,如果面板沒有顯示,它不呈現,這並沒有真正幫助我太多。有沒有辦法「渲染」它,但不顯示在屏幕上?基本上我正在構建一個組件,需要寫入圖像但不顯示。 – 2009-08-28 21:09:12
基本上我構建需要得到寫入圖像 但不顯示
ScreenImage解釋如何做你想做的一個組成部分 。
ScreenImage.java的相關部分(稍作編輯)。 layoutComponent
強制所有按鈕出現在圖像中。
/**
* @return Renders argument onto a new BufferedImage
*/
public BufferedImage createImage(JPanel panel, int width, int height) {
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = bi.createGraphics();
panel.setSize(width, height); // or panel.getPreferedSize()
layoutComponent(panel);
panel.print(g);
return bi;
}
private void layoutComponent(Component component) {
synchronized (component.getTreeLock()) {
component.doLayout();
if (component instanceof Container) {
for (Component child : ((Container) component).getComponents()) {
layoutComponent(child);
}
}
}
}
查看BasicTableUI。單元格渲染器在圖像上繪製而不顯示,然後在可見表格組件上繪製。
湯姆的回答基本上是正確的,但不建議直接調用paint()
,因爲它是一個同步調用,可以在擺動線程上通過其他操作中斷。除了使用paint()
的,我們應該用print()
代替
public BufferedImage createImage(JPanel panel) {
int w = panel.getWidth();
int h = panel.getHeight();
BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
Graphics2D g = bi.createGraphics();
panel.print(g);
return bi;
}
我同意。 JPanel.print()更好。 JPanel.paint()導致我的應用程序中出現錯誤。
public BufferedImage createImage(JPanel panel) {
int w = panel.getWidth();
int h = panel.getHeight();
BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
Graphics2D g = bi.createGraphics();
panel.print(g);
return bi;
}
- 1. 將jpanel轉換爲java中的PNG圖像
- 2. 將JPanel另存爲圖像
- 3. 將JPanel導出爲圖像
- 4. 將圖像轉換爲流
- 5. 將varbinary轉換爲圖像
- 6. 將圖像轉換爲DrawingImage
- 7. 將圖像轉換爲ushort?[]
- 8. 將BufferedInputStream轉換爲圖像
- 9. 將Swf轉換爲圖像
- 10. 將UITextView轉換爲圖像
- 11. 將Blob轉換爲圖像
- 12. 將Android.Graphics.Bitmap轉換爲圖像
- 13. 將ListBoxItem轉換爲圖像
- 14. 將HTML轉換爲圖像
- 15. 將圖像轉換爲Base64String
- 16. 將HtmlElement轉換爲圖像?
- 17. 將圖像轉換爲JSON
- 18. 將PDF轉換爲圖像
- 19. 將ppt轉換爲圖像
- 20. 將xls轉換爲圖像
- 21. 將netcdf轉換爲圖像
- 22. 將gridview轉換爲圖像
- 23. 將圖像轉換爲灰度圖像
- 24. 將圖像URL轉換爲圖像Android
- 25. 將PIL圖像轉換爲VIPS圖像
- 26. 將圖像轉換爲色度圖像
- 27. 將.png圖像轉換爲.gif圖像
- 28. 如何將JPanel轉換爲文件?
- 29. 將JPanel轉換爲二進制數組
- 30. 將JPanel的區域轉換爲BufferedImage
好吧,我放棄了。我在最後兩個帖子中給出了兩個答案,你完全忽略了。祝你今後發佈好運。 – camickr 2009-08-29 01:02:45
我很欣賞這些迴應,我一直沒有忽視它們。在這篇文章中,ScreenImage並不是我正在尋找的東西,而這種僅僅繪製到其他圖形上的方法對我來說似乎是正確的方向。在對話框的帖子中,它變成了一個非問題,我一直在淹沒,所以我沒有回覆所有的東西。我很欣賞你的迴應。 – 2009-08-29 15:59:38