栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java在Swing中显示动画BG

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java在Swing中显示动画BG

使用

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.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, 0, 0, getWidth(), getHeight(), this);    }    public static void main(String[] args) throws MalformedURLException {        final URL url = new URL("http://pspre.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, 10));     imagePanel.setBorder(new EmptyBorder(20, 20, 20, 20));     for (int ii = 1; ii < 51; ii++) {         imagePanel.add(new JButton("" + ii));     }     f.setContentPane(imagePanel);     f.pack();     f.setVisible(true); }        });    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/483873.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号