我有一个JTable 第一列放的是图片 。比如现在表格(0,0)位置插入图片a.jpg(位于磁盘某个位置),然后修改图片a(比如可以删掉a  再把图片b改成a.jpg).再在(1,0)插入图片a(此时图片已被覆盖,样子改变了路径和文件名都没变),但是JTable显示的还是旧图片的样子,我觉得是因为JTabel缓存的问题。求解!如何在修改图片后JTable也能更新显示?

解决方案 »

  1.   


    硬盘上的文件变了,位于内存中的 Image 类型的对象没变。
    使用定制的 TableModel,更改数据模型以后通过 fire event 的方式通知 view 层重绘。
      

  2.   

    插入新行(第一列为图片)时图片都是new ImageIcon(filePath)的,并不是使用旧图片对象的内存。TableModel是定制的,添加行后加了三句public void addRow(Object[] obj) {
    dataVec.add(obj);
    fireTableRowsInserted(0, dataVec.size()-1);
    fireTableRowsUpdated(0, dataVec.size()-1);
    fireTableDataChanged();
    }也没用,难道界面显示的是图片的显存···?
      

  3.   

    问题已解决new ImageIcon(String fileName) 是不行的,难道是因为JVM中String类型存放在字符串池中导致新建的ImageIcon对象都指向了缓存中的旧ImageIcon对象?
    解决方法:在插入新行时ImageIcon ii = new ImageIcon(Toolkit.getDefaultToolkit().createImage(img.getFileUrl()));
    addRow(new Object[]{ii,···});求高手解惑。