swing jtable 图片缓存问题
我有一个JTable 第一列放的是图片 。比如现在表格(0,0)位置插入图片a.jpg(位于磁盘某个位置),然后修改图片a(比如可以删掉a 再把图片b改成a.jpg).再在(1,0)插入图片a(此时图片已被覆盖,样子改变了路径和文件名都没变),但是JTable显示的还是旧图片的样子,我觉得是因为JTabel缓存的问题。求解!如何在修改图片后JTable也能更新显示? --------------------编程问答--------------------硬盘上的文件变了,位于内存中的 Image 类型的对象没变。
使用定制的 TableModel,更改数据模型以后通过 fire event 的方式通知 view 层重绘。 --------------------编程问答--------------------
插入新行(第一列为图片)时图片都是new ImageIcon(filePath)的,并不是使用旧图片对象的内存。TableModel是定制的,添加行后加了三句
public void addRow(Object[] obj) {
dataVec.add(obj);
fireTableRowsInserted(0, dataVec.size()-1);
fireTableRowsUpdated(0, dataVec.size()-1);
fireTableDataChanged();
}
也没用,难道界面显示的是图片的显存···? --------------------编程问答-------------------- 问题已解决。。。new ImageIcon(String fileName) 是不行的,难道是因为JVM中String类型存放在字符串池中导致新建的ImageIcon对象都指向了缓存中的旧ImageIcon对象?
解决方法:在插入新行时
ImageIcon ii = new ImageIcon(Toolkit.getDefaultToolkit().createImage(img.getFileUrl()));
addRow(new Object[]{ii,···});
求高手解惑。
补充:Java , Java SE