我在JTable的排序功能中遇到了阻塞问题;这使得这个业余开源项目的开发拖延了4个月。希望你能给我指出正确的方向。
上下文:我正在扩展ps3mediasserver的功能,以添加一个带有pms-mlx的媒体库。媒体服务器的UI已经使用swing完成。
问题:当单击JTable中的列标题时,一个看似随机的列被排序,而不是被单击的列。
当前实现:这是用于实现的不同组件和类的描述:
- ettable:由于JTable默认情况下不支持替代行颜色,所以我切换到扩展JTable的ettable。来源来自这里
- FileDisplayTable:这是创建表的类。在init()方法中,排序是通过'table.setAutoCreateRowSorter(true);' 启用的
- FileDisplayTableCellRenderer:存在以始终在左侧对齐单元格内容
- FileDisplayTableColumnModel:在内部类型和列名之间做一些映射
- FileDisplayTableAdapter:这个类实现了com.jgoodies.binding.adapter.AbstractTableAdapter来映射对象和表列。
可能的解决方式:
- 最好,我想保持当前的实现,并找出如何纠正排序,但我怀疑有人能帮我解决这个问题!此外,由于奇怪的行为,我不得不添加一些代码;它们在代码 中被注释
- 另一种选择是完全更改另一个控件的JTable。我做了一些研究,但没有找到我想要的解决方案。约束条件是
- 必须可嵌入到swing UI
- 最好支持数据绑定
- 支持交替行颜色 行排序
在某些时候,可能会打开一个编辑对话框,其中必须检索行内容,可以编辑行,并且在保存行时必须更新行。
在重写整个东西之前,我想确保组件能够处理我想用它做的所有事情。
我更习惯于在Visual Studio中使用。net创建gui。这是完全不同的,更困难的是做同样的挥杆。请告诉我我错了:)
[edit]如果有人愿意重现这个问题,要么获得源代码,要么获得二进制文件,启动应用程序,导航到媒体库选项卡。在"常规"部分,通过添加一些视频文件导入一些视频。转到库部分,单击apply以刷新列表,并尝试对表进行排序。
知道JTable
列可以被用户拖动可能是有用的。因此,视图(JTable
或子类)和模型(TableModel
的实现)可能具有不同的列号。类似地,与模型相比,RowSorter
可能会影响视图中的行顺序或行数。相关的转换方法在如何使用表:排序和过滤中提到。特别是:"当使用排序器时,一定要记住转换单元格坐标。"
附录:作为一种替代方案,可以考虑org.netbeans.swing.etable.ETable
或它的子类org.netbeans.swing.outline.Outline
,如图所示。