但是要加载一个图像作为容器的背景来绘制,我通常会使用ImageIO.read()或Toolkit.getimage()(当我在过去的一千年感觉到怀旧的时候).既不加载图像的方法也不会产生循环图像,通常只是第一帧.
如何加载背景的动画图像?
解决方法
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()方法应根据需要调用重绘.
编辑:
如注释所述,不需要调用prepareImage – 下面包括一个工作示例.关键是被覆盖的paintComponent方法调用Graphics.drawImage,它提供了ImageObserver钩子. imageUpdate方法(在java.awt.Component中实现)将继续使用ImageObserver.FRAMEBITS标志设置来调用.
import java.awt.EventQueue; import java.awt.Graphics; import java.awt.GridLayout; import java.awt.Image; import java.awt.image.ImageObserver; import java.net.MalformedURLException; import java.net.URL; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; public class ImagePanel extends JPanel { private final Image image; public ImagePanel(Image image) { super(); this.image = image; } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); g.drawImage(this.image,getWidth(),getHeight(),this); } public static void main(String[] args) throws MalformedURLException { final URL url = new URL("http://pscode.org/media/starzoom-thumb.gif"); EventQueue.invokelater(new Runnable() { @Override public void run() { JFrame f = new JFrame("Image"); f.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE); f.setLocationByPlatform(true); Image image = f.getToolkit().createImage(url); ImagePanel imagePanel = new ImagePanel(image); imagePanel.setLayout(new GridLayout(5,10,10)); imagePanel.setBorder(new EmptyBorder(20,20,20)); for (int ii = 1; ii < 51; ii++) { imagePanel.add(new JButton("" + ii)); } f.setContentPane(imagePanel); f.pack(); f.setVisible(true); } }); } }
原文地址:https://www.jb51.cc/java/126317.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。