2011-12-01 51 views
0

我在從屏外JPanel創建BufferedImage時遇到了問題。具體來說,我正在嘗試繪製一個JPanel(包含一些Java3D元素)的圖像作爲我正在處理的應用程序的背景圖像。獲取JPanel的圖像

我發現了幾個線程描述瞭如何通過將JPanel繪製到BufferedImage的圖形上下文來獲得JPanel的圖像,但是當我繪製BufferedImage時,我得到的只是一個大的白色矩形。

這裏是我的代碼:

SimpleWorld j3DPanel; // a custom JPanel that contains some simple Java3D elements 

// CONSTRUCTOR 

public GameBackgroundObject() 
{ 
    super(); 

    // Here I set up a JPanel that contains some Java3D elements. 

    j3DPanel = new SimpleWorld(); 
    j3DPanel.setSize(mainLevel.SCREENW, mainLevel.SCREENH); 
    j3DPanel.setBounds(0,0,mainLevel.SCREENW, mainLevel.SCREENH); 
    j3DPanel.doLayout(); 
    j3DPanel.validate(); 
} 


protected void draw(Graphics2D parentComponentGraphics, ...) 
{ 
    super.draw(parentComponentGraphics, ...); 

    int w = j3DPanel.getWidth(); 
    int h = j3DPanel.getHeight(); 

    BufferedImage j3DImg = new BufferedImage(w,h,BufferedImage.TYPE_INT_ARGB); 
    Graphics2D g = j3DImg.createGraphics(); 
    j3DPanel.paint(g); 

    parentComponentGraphics.drawImage(j3DImg, null, null); 

} 

而且,我試着將我的JPanel到JFrame的內容。它在那裏工作並正確顯示呈現的Java3D元素。但是,只要我嘗試獲取JPanel的BufferedImage並繪製該圖像,我就會得到這個大的白色矩形。

回答

0

嘗試調用:

j3DPanel.paintComponent(g); 

代替:

j3DPanel.paint(g); 
+0

通常是一個足夠好的猜測 - 但不在這裏:-)你真的想繪製整個面板,包括其邊框和兒童 – kleopatra

+0

是的,我也試過,但沒有奏效。 – Cazra