小编典典
使用ImageIcon可能是最简单的方法。请记住以下几点:
ImageIcon(URL)本身利用Toolkit.getImage(URL)。你可能更喜欢使用Toolkit.createImage(URL)- getImage()可能使用缓存的或共享的图像数据。
ImageIcon利用MediaTracker有效地等待图像完全加载。
因此,你的问题可能不是Toolkit(ImageIO是另一种野兽)的使用,而是你没有渲染完全加载的图像。可以尝试的一件有趣的事情是:
Image image = f.getToolkit().createImage(url);
//...
ImagePanel imagePanel = new ImagePanel(image);
imagePanel.prepareImage(image, imagePanel);
//...
我的Swing / AWT / J2D可能有点模糊,但是想法是因为你ImagePanel是ImageObserver,所以可以异步通知有关图像信息。该Component.imageUpdate()方法应repaint根据需要调用。
编辑:
如评论中所述,prepareImage不需要调用-下面包含一个工作示例。关键是重写的paintComponent方法调用Graphics.drawImage,它提供了ImageObserver钩子。该imageUpdate方法(在中实现java.awt.Component)将在ImageObserver.FRAMEBITS设置了标志的情况下连续调用。
import java.awt.EventQueue;
import java.awt.Graphics;
import java.