swing jtable 图片缓存问题

迹- 2012-12-20 11:56:10
我有一个JTable 第一列放的是图片 。比如现在表格(0,0)位置插入图片a.jpg(位于磁盘某个位置),然后修改图片a(比如可以删掉a 再把图片b改成a.jpg).再在(1,0)插入图片a(此时图片已被覆盖,样子改变了路径和文件名都没变),但是JTable显示的还是旧图片的样子,我觉得是因为JTabel缓存的问题。求解!如何在修改图片后JTable也能更新显示?
...全文
180 3 打赏 收藏 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
迹- 2012-12-20
  • 打赏
  • 举报
回复
引用 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();
		}
也没用,难道界面显示的是图片的显存···?
raistlic 2012-12-20
  • 打赏
  • 举报
回复
引用 楼主 lj745280746 的回复:
我觉得是因为JTabel缓存的问题
硬盘上的文件变了,位于内存中的 Image 类型的对象没变。
引用 楼主 lj745280746 的回复:
如何在修改图片后JTable也能更新显示?
使用定制的 TableModel,更改数据模型以后通过 fire event 的方式通知 view 层重绘。
迹- 2012-12-20
  • 打赏
  • 举报
回复
问题已解决。。。new ImageIcon(String fileName) 是不行的,难道是因为JVM中String类型存放在字符串池中导致新建的ImageIcon对象都指向了缓存中的旧ImageIcon对象? 解决方法:在插入新行时

ImageIcon ii = new ImageIcon(Toolkit.getDefaultToolkit().createImage(img.getFileUrl()));
addRow(new Object[]{ii,···});
求高手解惑。

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧