当前位置:编程学习 > JAVA >>

swing jtable 图片缓存问题

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


硬盘上的文件变了,位于内存中的 Image 类型的对象没变。

引用 楼主 lj745280746 的回复:
如何在修改图片后JTable也能更新显示?


使用定制的 TableModel,更改数据模型以后通过 fire event 的方式通知 view 层重绘。 --------------------编程问答--------------------
引用 1 楼 raistlic 的回复:
引用 楼主 lj745280746 的回复:我觉得是因为JTabel缓存的问题

硬盘上的文件变了,位于内存中的 Image 类型的对象没变。

引用 楼主 lj745280746 的回复:如何在修改图片后JTable也能更新显示?

使用定制的 TableModel,更改数据模型以后通过 fire event 的方式通知 view 层重绘。
        ……


引用 1 楼 raistlic 的回复:
引用 楼主 lj745280746 的回复:我觉得是因为JTabel缓存的问题

硬盘上的文件变了,位于内存中的 Image 类型的对象没变。

引用 楼主 lj745280746 的回复:如何在修改图片后JTable也能更新显示?

使用定制的 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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,