树节点中的动态gif图像

3

我想在一个树节点中添加一张动态的gif图片,但是很明显JTree是唯一无法渲染gif动画的组件。请问你能否给我建议如何解决这个问题?

import java.awt.BorderLayout;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTree;
import javax.swing.tree.DefaultTreeCellRenderer;

public class Test extends JFrame {

    public static void main(String[] args) {

        ImageIcon leafIcon = new ImageIcon(any_gif_animated_image);

        DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer();
        renderer.setClosedIcon(leafIcon);
        renderer.setOpenIcon(leafIcon);
        renderer.setLeafIcon(leafIcon);

        JTree tree = new JTree();
        tree.setCellRenderer(renderer);

        JLabel label = new JLabel(leafIcon);
        label.setText("loading");

        JPanel panel = new JPanel(new BorderLayout());

        panel.add(label, BorderLayout.NORTH);
        panel.add(tree, BorderLayout.CENTER);

        JFrame frame = new JFrame("Test");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(panel);
        frame.setSize(900, 600);
        frame.setVisible(true);
    }
}
1个回答

2

所以主要的想法是使用一个ImageObserver来获取gif图像的下一帧并显示出来,对吗? - Adel Boutros
另外,我是否需要为每个节点创建一个ImageIcon?因为如果我重复使用相同的图标来表示所有节点,只有第一个节点会有动画效果,其余节点则是静态的。 - Adel Boutros
更新:我使用了“tree.repaint()”而不是之前的方法,并且它有效。谢谢! :) - Adel Boutros
请注意,渲染器中大多数动画 GIF 的对象频率非常低。 - mKorbel
那你的意思是什么? - Adel Boutros
我尝试了几个动画GIF,其中一些在屏幕上晃动或疯狂旋转...(刷新频率)。 - mKorbel

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