Java JTable中带有图像的JButton。如何使它成为动画?
我在这里遇到了点麻烦 我的目的是将GIF图像添加到按钮中,并将该按钮发送到JTableJava 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
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[…]”,这让我得出了这个结论。