【发布时间】:2011-08-24 07:45:28
【问题描述】:
我在 JTable 的排序功能上遇到了阻塞问题;这使得业余时间开源项目的开发停滞了4个月。希望在这里指出正确的方向。
上下文:我正在扩展ps3mediaserver 的功能,以添加带有pms-mlx 的媒体库。媒体服务器的 UI 已经使用 swing 完成。
问题:单击 JTable 中的列标题时,看似随机的列被排序,而不是被单击的列。
当前实现:以下是用于实现的不同组件和类的描述:
- ETable:由于在 JTable 中默认不支持备用行颜色,我已切换到扩展 JTable 的 ETable。来源来自here
- FileDisplayTable:这是创建表的类。在 init() 方法中,使用 'table.setAutoCreateRowSorter(true);' 启用排序
- FileDisplayTableCellRenderer:存在以始终对齐左侧的单元格内容
- FileDisplayTableColumnModel: 内部类型和列名之间是否有一些映射
- FileDisplayTableAdapter:此类实现 com.jgoodies.binding.adapter.AbstractTableAdapter 以将对象与表列映射。
可能的解决方案:
- 最好,我想保留当前的实现并弄清楚如何更正排序,但我怀疑有人能帮我解决这个问题!?此外,由于奇怪的行为,我不得不添加一些代码;他们在代码中被注释
- 另一种选择是完全更改另一个控件的 JTable。我进行了一些研究,但没有找到我希望的解决方案。限制是
- 它必须可嵌入到摆动 UI 中
- 最好它应该支持数据绑定
- 支持交替行颜色
- 行排序
在某些时候,可以打开一个编辑对话框,在该对话框中必须检索行的内容,可以对其进行编辑,并且在保存时必须更新该行。
在重做整个事情之前,我想确保该组件能够处理我想做的所有事情。
我更习惯于在 Visual Studio 中使用 .NET 创建 GUI。这是完全不同的,而且很难用挥杆做同样的事情。请告诉我我错了:)
[编辑] 如果有人愿意重现问题,请获取源代码或二进制文件,启动应用程序,导航到媒体库选项卡。在一般部分通过添加一些视频文件导入一些视频。转到库部分,单击应用以刷新列表并尝试对表格进行排序。
【问题讨论】:
-
导入视频以重现您的问题?你一定是在开玩笑 :-) 这有点相反:你把它剥离到证明问题的最小单位,然后就有可能获得帮助。在你的鞋子里,我将从 tablemodel 实现开始:追踪你为什么/如何得到无效的 columnIndices - 会赌一瓶(德国!)啤酒,这就是原因......
-
不,不开玩笑 :p (我也没想到有人能走那么远;)我花了好几个小时试图弄清楚这件事,但没有成功,我无法描述所有在这里测试。我不得不绕过其他一些奇怪的行为,因为视图的列与我的模型不一致,并且事件在例如删除列的行为也不符合我的预期。这就是为什么我更希望有人指出我会错过的组件并替换 JTable。
-
在您发现代码中的潜在错误之前,您没有多少选择可以挖掘。没有,即使通过某种魔法它开始看起来像在某个时候工作,它只会偶然地这样做,不能保证它会坚持下去。祝你好运!
-
我完全同意,不喜欢那里的魔法行为。如果我有一个起点,我不介意深入研究它,但是在花了很多时间试图弄清楚这一点之后,我真的不知道分拣机调用了哪些方法可以影响纠正(甚至理解) 它。我已经看到了我认为与时间问题有关的不同奇怪行为,例如在模型之前视图中的列已更新,系统要求不再存在的列(请参阅 FileDisplayTableAdapter 中 getValue 方法中的注释)
-
看过评论,这就是为什么我打赌模型是罪魁祸首,不知何故 :-) 专栏怎么不存在了?您如何删除该列,以及如何将删除通知系统?
标签: java swing sorting binding jtable