2013-03-26 88 views
2

因此,我有一個JLayeredPane(實際上是一個JLayeredPane子類)。這是一個JPanel。我想添加一個BufferedImage到Jpanel。向JLayerPane上的JPanel添加BufferedImage

public class BigMap extends JLayeredPane implements MouseListener 
    JPanel mapPanel; 
    BufferedImage theMap; 
    public BigMap (BufferedImage m){ 
    theMap = m; 
    mapPanel = new JPanel(); 
    add(mapPanel, 0); 
    mapPanel.setBounds(0, 0, 640, 640); 
    //other unimportant stuff 
    } 

    @Overrride 
    public void paintComponent (Graphics g){ 
    super.paintComponent(g); 
    Graphics2D gmap = (Graphics2D) mapPanel.getGraphics(); 
    gmap.drawImage(theMap, null, 0, 0); 
    //some other stuff which is working just fine 
    } 

問題是沒有顯示BufferedImage。 JPanel肯定存在,因爲我可以設置它的背景顏色,如果我願意的話。我意識到JLayeredPane沒有佈局管理器,並且必須爲JPanel設置界限,但是這對JPanel本身不應該是一個問題,當然?鑑於BufferedImage沒有方法直接控制其大小,我不明白我是如何克服的,如果是。

任何幫助表示讚賞。

+0

'mapPanel.getGraphics()'當你已經有方法參數的'Graphics g'時,你爲什麼試圖獲得另一個'Graphics'對象?無論如何,您檢索的圖形可能無效。一般來說,不要在組件上使用'getGraphics'。 – 2013-03-26 18:50:24

+0

這只是因爲我最終會在JLayeredPane上放置其他JPanel,並帶有自己的圖像。這是企圖保持整潔 - 每個小組的圖形負責其內容。不好的做法? – MrB 2013-03-26 19:05:09

+0

_Panel負責自己的內容。不好的做法_不,但是這是在代碼調用'paint/paintComponent'之前完成的。你應該永遠不需要照顧圖形,Swing會在適當的時候提供適當的圖形。不要在任何組件上調用'getGraphics',你應該沒問題。 – 2013-03-26 23:44:54

回答

2

這裏的問題是,您覆蓋分層窗格的paintComponent()方法,而不是JPanelJPanel稍後將作爲分層窗格的子項之一進行繪製,這將消除您繪製的內容。

一般來說,paintComponent()方法應該繪製到給定的Graphics中,而不是繪製到其他組件的圖形中。

+0

啊,我沒有意識到這一點。我想回到教程。非常感謝你,接受並贊成。 – MrB 2013-03-26 18:42:55

+0

現在完美工作,根據您的回答作出更改。再次感謝你。 – MrB 2013-03-26 19:05:48