2015-06-01 35 views
0
@Override 
public void paintComponent(Graphics g) { 
    Graphics2D g2 = (Graphics2D) g; 
    super.paintComponent(g2); 

    g2.fillRect(20, 20, 200, 200); 
    g2.drawImage(map, 0, 0, 1004, 687, null); 
} 

這是我的JPanel爲的paintComponent的代碼。的Java Swing不會顯示g.drawImage(),直到重繪()被調用

當應用程序啓動時,我可以看到矩形(僅在那裏,因爲我想檢查paintComponent是否被調用)。但地圖不繪製,直到我強制重畫窗口或按下強制重繪()的按鈕重繪

我試着在幾個地方調用validate(),因爲有些答案表明,但它沒有工作。

+0

你如何獲得'map'?你使用'ImageIO.read(...)'嗎?請注意,'validate()'不應該在這裏使用任何東西,因爲它不與重繪組件相關聯,而是與佈置其子組件(如果有的話)相關聯。 –

+0

我將映射作爲創建JPanel對象時實例化的私有字段。所以,我有私人Image map = Toolkit.getDefaultToolkit()。getImage(「src/hw8/data/campus_map.jpg」); –

+0

如果使用'ImageIO.read(new File(...))',會發生什麼? –

回答

5
g2.drawImage(map, 0, 0, 1004, 687, null); 

嘗試使用:

g2.drawImage(map, 0, 0, 1004, 687, this); 

也許圖像不完全在被調用的paintComponent()方法時讀取。 「this」將導致圖像在I/O完成時被繪製。這是面板將被通知I/O完成,面板將重新繪製自己。

相關問題