Swing 为什么在JTable列中不显示动画.gif图标?

Swing 为什么在JTable列中不显示动画.gif图标?,swing,user-interface,jtable,icons,gif,Swing,User Interface,Jtable,Icons,Gif,这是processing.gif文件 这里是initial.png 这是输出 这是代码。processing.gif正在其他位置工作,例如JTabbedPane的选项卡中。在JTable的列中,它没有显示。有什么解释和解决办法吗?processing.gif是一个移动的图标,指示正在加载某些内容 import javax.swing.*; import javax.swing.table.*; public class TableIcon extends JFrame { public

这是processing.gif文件

这里是initial.png

这是输出

这是代码。processing.gif正在其他位置工作,例如
JTabbedPane
的选项卡中。在
JTable
的列中,它没有显示。有什么解释和解决办法吗?processing.gif是一个移动的图标,指示正在加载某些内容

import javax.swing.*;
import javax.swing.table.*;

public class TableIcon extends JFrame
{
    public TableIcon()
    {
        ImageIcon initial = new ImageIcon(getClass().getResource("initial.png"));
        ImageIcon processing = new ImageIcon(getClass().getResource("processing.gif"));


        String[] columnNames = {"Picture", "Description"};
        Object[][] data =
        {
            {initial, "initial"},
            {processing, "processing"}
        };

        DefaultTableModel model = new DefaultTableModel(data, columnNames);
        JTable table = new JTable( model )
        {
            public Class getColumnClass(int column)
            {
                return getValueAt(0, column).getClass();
            }
        };
        table.setPreferredScrollableViewportSize(table.getPreferredSize());

        JScrollPane scrollPane = new JScrollPane( table );
        getContentPane().add( scrollPane );
    }

    public static void main(String[] args)
    {
        TableIcon frame = new TableIcon();
        frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
        frame.pack();
        frame.setVisible(true);
    }

}

默认情况下,动画gif在JTable中无法正常工作。但是有一种简单的方法可以解决这个问题,使用可以找到的
AnimatedIcon

基本上,它会重新实现
图标
界面,注册图标的渲染位置,当需要绘制gif的新帧时,它会自动重新绘制正确的区域


还有另一种选择,您可以为需要渲染动画gif的每个单元格注册一个特定的ImageObserver,但我觉得这有点乏味。

如果动画gif在
JTable
中得到完全支持,那就太好了,但不幸的是,它看起来不像。您已经提到,它在
JTabbedPane
的选项卡中起作用。我在
表格图标
构造函数的末尾添加了以下行:

getContentPane().add(new JLabel(processing), BorderLayout.SOUTH);
final Timer animationTimer = new Timer(100, e -> table.repaint());
animationTimer.start();
这稍微改变了情况:表格显示了一帧GIF,而不是什么都没有。动画GIF正在标签中工作。我还注意到,调整窗口大小时,表中的动画正在运行。这让我想到了这个肮脏的黑客,它似乎在我的系统上工作(也添加到
TableIcon
构造函数的末尾):


当然,正如我所说,它在JTabbedPaneintial.png中工作,并且它与processing.gif位于同一位置。这不是这里的问题。我很困惑为什么一个移动的.gif不能显示在一个JTable中。这里是上面的附加图片。你可以下载上面的图片并尝试一下