JLabel setIcon不能刷新图片问题的解决办法


最近在开发上面 遇到一个问题,就是在label上用setIcon设置图片后,当条件改变时,label上面的图片不能及时更新。尝试用改变图片名字的办法可以使label上面的图片改变,但是,该办法不是个好办法。后来发现一个更好的办法,代码如下
                                URL url = com.teczasky.efpms.common.util.AwtUtil.class.getClassLoader().getResource("com/teczasky/efpms/ediclient/image/filebak/confirm_top.gif" );
                             Image img = Toolkit.getDefaultToolkit().createImage(url); 
                            lbl.setIcon(new ImageIcon(img));

这样每次图片内容更新

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
是的,你可以在JLabel中放入gif动图并让它自动播放。 首先,你需要使用一个库来加载和显示gif动画。一个很好用的库是GifAnimationDecoder,它可以在Java中轻松加载和播放gif动画。你可以在这里下载该库:https://github.com/dlemmermann/JGifAnimation。 然后,在你的代码中,你需要将gif动画加载到一个BufferedImage对象中,然后将其设置为JLabel的图像,并使用一个计时器来更新动画帧。以下是一个示例代码: ```java import java.awt.image.BufferedImage; import java.io.IOException; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.SwingUtilities; import org.jgif.JGifAnimator; import org.jgif.JGifDecoder; public class GifLabelExample extends JFrame { private JLabel gifLabel; public GifLabelExample() { setTitle("Gif Label Example"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(400, 400); // Load gif animation from file JGifDecoder decoder = new JGifDecoder(); try { decoder.read(getClass().getResourceAsStream("animation.gif")); } catch (IOException e) { e.printStackTrace(); } // Create animator and buffered image JGifAnimator animator = new JGifAnimator(decoder.getFrameCount()); BufferedImage image = new BufferedImage(decoder.getWidth(), decoder.getHeight(), BufferedImage.TYPE_INT_ARGB); // Add frames to animator and image for (int i = 0; i < decoder.getFrameCount(); i++) { animator.addFrame(decoder.getFrame(i).getImage()); image.getGraphics().drawImage(decoder.getFrame(i).getImage(), 0, 0, null); } // Create label and set image gifLabel = new JLabel(new ImageIcon(image)); add(gifLabel); // Start animator animator.start(); // Create timer to update label javax.swing.Timer timer = new javax.swing.Timer(animator.getDelay(), e -> { if (gifLabel != null) { gifLabel.setIcon(new ImageIcon(animator.getFrame())); } }); timer.setRepeats(true); timer.start(); } public static void main(String[] args) { SwingUtilities.invokeLater(() -> { GifLabelExample ex = new GifLabelExample(); ex.setVisible(true); }); } } ``` 在这个例子中,我们使用JGifDecoder来加载gif动画,然后使用JGifAnimator将每一帧添加到动画中。我们还创建了一个BufferedImage来保存第一帧,并将其设置为JLabel的图像。然后,我们使用javax.swing.Timer来定期更新JLabel的图像,以显示动画的下一帧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值