Java JTable中带有图像的JButton。如何使它成为动画?

Java JTable中带有图像的JButton。如何使它成为动画?,java,swing,jtable,jbutton,gif,Java,Swing,Jtable,Jbutton,Gif,我在这里遇到了点麻烦 我的目的是将GIF图像添加到按钮中,并将该按钮发送到JTable public class JButtonTableRenderer extends DefaultTableCellRenderer { @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean has

我在这里遇到了点麻烦

我的目的是将GIF图像添加到按钮中,并将该按钮发送到JTable

public class JButtonTableRenderer extends DefaultTableCellRenderer {

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
            boolean hasFocus, int row, int column) {

        return (JButton) value;


    }
}
  DefaultTableModel  oDtb = (DefaultTableModel) Tbl_Monkey.getModel();
   oDtb.addRow(oTheObjectArrayofJButton);
首先,我用定制的代码制作了一个jtable

private javax.swing.JTable Tbl_Monkey = new javax.swing.JTable();

Tbl_Monkey.setModel(new javax.swing.table.DefaultTableModel(
    new Object [][] {
        {null, null, null, null, null, null, null, null, null, null, null, null, null}
    },
    new String [] {
        "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13"
    }
) {
    boolean[] canEdit = new boolean [] {
        true, false, false, false, false, false, false, false, false, false, false, false, false
    };

    public boolean isCellEditable(int rowIndex, int columnIndex) {
        return canEdit [columnIndex];
    }

    @Override
    public Class getColumnClass(int columnIndex) {
        return JButton.class;
    }
});


Tbl_Monkey.setDefaultRenderer(JButton.class, new JButtonTableRenderer());
我还制作了定制的JTable渲染器

public class JButtonTableRenderer extends DefaultTableCellRenderer {

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
            boolean hasFocus, int row, int column) {

        return (JButton) value;


    }
}
  DefaultTableModel  oDtb = (DefaultTableModel) Tbl_Monkey.getModel();
   oDtb.addRow(oTheObjectArrayofJButton);
之后,我设置JButton的图标(GIF),然后使用DefaultTableModel将其直接传递到JTable中, 而且它非常适合JTable, 但已设置动画的GIF未设置动画

public class JButtonTableRenderer extends DefaultTableCellRenderer {

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
            boolean hasFocus, int row, int column) {

        return (JButton) value;


    }
}
  DefaultTableModel  oDtb = (DefaultTableModel) Tbl_Monkey.getModel();
   oDtb.addRow(oTheObjectArrayofJButton);
我意识到,如果我只是在JTable之外创建JButton,图标(GIF)就会动画化。 但是如果我将JButton放在JTable中,它就不会动画。除非我点击那个按钮。。。然后动画出现了,但是只有1帧。我应该重新单击以在单击的按钮上获得该GIF的动画。那不好


怎么解决呢

我认为问题的原因是JTable使用JButton来渲染单元格,除非您正在编辑给定的单元格,然后JTable使用JButton作为单元格编辑器

当JTable使用JButton作为单元渲染器时,它可能只是告诉JButton在给定的单元中绘制自己,就是这样。我不确定SWING在JButtons上绘制动画GIF时采用哪种方法,但我认为有一个线程在做一些背景工作。然而,在JTable的例子中,我们没有处理一个真正的按钮,因此它没有被重新绘制


关于如何解决问题,我没有一个真正的、经过尝试的建议,除了推荐另一个几乎相同的问题。

我关于动画Gif的问题,如果你将这些文件作为图标放在JTable外的JButton上,那么动画就起作用了???@mKorbel是吗?如果我使用setIcon()方法,JButton没有问题。问题只出现在JTable上。。。。似乎JTable只能将JButton作为静态JButton。因此,每当我将图标放在JTable中的JButton时,JTable都无法很好地渲染动画。。。。你知道它为什么会这样吗?如果我把GIF放在JTable之外,是的。。。它起作用了。即使我制作了一个图标为GIF的JButton,并将其放置在JTable外部,它也会制作动画。然后检查此代码,只在此处放置动画图标,然后我们会看到……谢谢@mKorbel,这是一个很长的代码。实际上我有点困惑。“getTableCellRenderComponent()”方法及其“return(JButton)value;”是否足以呈现JButton?您从链接中提供的代码似乎返回了其他值:(是的,我认为你是对的。swing可能是负责重新绘制JButton图像的人。但如果JButton被放置在JTable上,情况就不是这样了……天哪……还有其他情况。JDK开发团队从来没有考虑过这一点吗?:d JTable的默认单元格渲染器使用JLabel,而不是JButton。查看DefaultTableCellRenderer.是的,但我相信gumuruh会将一个JButton传递给JTable,这将导致JButton被用作单元格渲染器。gumuruh写道“[…]我设置了JButton的图标(GIF),然后将其直接传递给JTable[…]”,这让我得出了这个结论。