在调用repaint()之前,Java swing不会显示g.drawImage()

0 java swing repaint drawimage paintcomponent

@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);
}
Run Code Online (Sandbox Code Playgroud)

这是我的JPanel中paintComponent的代码.

当应用程序启动时,我可以看到矩形(仅在那里,因为我想检查是否正在调用paintComponent).但是在我通过调整窗口大小或按下强制重绘()的按钮强制重绘之前,地图不会绘制.

我尝试在几个地方调用validate(),因为有些答案表明,但它没有用.

cam*_*ckr 5

g2.drawImage(map, 0, 0, 1004, 687, null);
Run Code Online (Sandbox Code Playgroud)

尝试使用:

g2.drawImage(map, 0, 0, 1004, 687, this);
Run Code Online (Sandbox Code Playgroud)

可能在调用paintComponent()方法时未完全读取图像.I/O完成后,"this"将导致图像被绘制.也就是说,面板将被通知I/O完成并且面板将重新绘制.