因此,我有一個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沒有方法直接控制其大小,我不明白我是如何克服的,如果是。
任何幫助表示讚賞。
'mapPanel.getGraphics()'當你已經有方法參數的'Graphics g'時,你爲什麼試圖獲得另一個'Graphics'對象?無論如何,您檢索的圖形可能無效。一般來說,不要在組件上使用'getGraphics'。 – 2013-03-26 18:50:24
這只是因爲我最終會在JLayeredPane上放置其他JPanel,並帶有自己的圖像。這是企圖保持整潔 - 每個小組的圖形負責其內容。不好的做法? – MrB 2013-03-26 19:05:09
_Panel負責自己的內容。不好的做法_不,但是這是在代碼調用'paint/paintComponent'之前完成的。你應該永遠不需要照顧圖形,Swing會在適當的時候提供適當的圖形。不要在任何組件上調用'getGraphics',你應該沒問題。 – 2013-03-26 23:44:54