一个在JButton上的动态GIF,当鼠标悬停时播放

5
Icon icon = new ImageIcon(getClass().getResource( "/img/icon.gif" ) );
aButton = new JButton("Its a button", icon);

有没有一种方法可以停止动画播放? 我在考虑将gif的静态jpg分配给它,然后当我悬停时,分配动画gif,但是我不认为MouseMotionListener中有关于鼠标移除的事件,所以无法重新加载静态jpg。
gif在按钮中循环播放,但是如果我悬停在上面,它就会消失。
如何使gif静态,如果我的鼠标光标不在按钮上?
如果我使用MouseMotionListener,是否会在我移开鼠标时触发事件?
@Override
public void mouseMoved(MouseEvent e) {
//play the gif
//if I take mouse off, call some method to stop playing animated gif
}

@Override
public void mouseDragged(MouseEvent e) {
}
2个回答

5

请查看:

不需要设置显式的鼠标监听器,转换会自动发生。

例如,在此示例中,我没有添加MediaTracker,因此将图像弹出到标签中以允许加载时间。最终用户是ImageObserver(在关闭第一个对话框之前等待它旋转)。

import java.awt.*;
import java.awt.image.BufferedImage;
import java.net.URL;
import javax.swing.*;

public class ImageSwapOnButton {

    public static void main( String[] args ) throws Exception {
        URL url = new URL("http://1point1c.org/gif/thum/plnttm.gif");

        Image image = Toolkit.getDefaultToolkit().createImage(url);
        ImageIcon spinIcon = new ImageIcon(image);
        JOptionPane.showMessageDialog(null, new JLabel(spinIcon));

        // create a static version of this icon
        BufferedImage bi = new BufferedImage(150,150,BufferedImage.TYPE_INT_ARGB);
        Graphics g = bi.getGraphics();
        g.drawImage(image,0,0,null);
        g.dispose();
        ImageIcon staticIcon = new ImageIcon(bi);

        JButton button = new JButton(staticIcon);
        button.setRolloverIcon(spinIcon);
        JOptionPane.showMessageDialog(null, button);
    }
}

此外,不要将静态图像保存为JPEG格式。JPEG是有损压缩的,不支持透明度。建议使用单帧GIF或PNG格式。

2
@Lan 试着用ImageIO制作一个动态GIF吧。 ;) - Andrew Thompson
@Lan 当我偶然发现这个小贴士时,我感到很惊讶!我经常使用ImageIO处理非动画图像,而我需要动画GIF的场合通常是在处理所有“自动魔法”(按钮、组件中的HTML等)的组件中。尽管我仔细查阅了文档,但我找不到任何关于为什么ImageIO不能生成动画GIF的解释。 - Andrew Thompson

-1
button.setIcon(new ImageIcon("/*icon location*/"));
button.setRolloverIcon(new ImageIcon("/*icon location*/"

当鼠标指针移动到按钮上时,动画gif图像不会消失。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接