2015-06-01 32 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完成,面板将重新绘制自己。

相关问题