我遇到了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完全更改为另一个控件.我做了一些研究,但没有找到我希望的解决方案.限制是这样的
>它必须嵌入在swing UI中
>最好它应该支持数据绑定
>支持备用行颜色
>行排序
在某些时候,可以打开编辑对话框,其中必须检索行的内容,可以编辑,并且在保存时必须更新行.
在重新处理整个事情之前,我想确保该组件能够处理我想要做的所有事情.
我更习惯在Visual Studio中使用.NET创建GUI.这是完全不同的,并且在挥杆时做同样的事情要困难得多.请告诉我我错了:)
[edit]如果有人愿意重现问题,请获取源或二进制文件,启动应用程序,导航到媒体库选项卡.在Genral部分,通过添加一些视频文件导入一些视频.转到库部分,单击“应用”以刷新列表并尝试对表进行排序.
最佳答案 知道用户可以拖动JTable列可能很有用.因此,视图(JTable或子类)和模型(TableModel的实现)可能具有不同的列号.同样,与模型相比,RowSorter可能会影响视图中的行的顺序或行数.相关的转换方法在
How to Use Tables: Sorting and Filtering中提到.特别是:“使用分拣机时,请务必记住转换单元格坐标.”
附录:作为替代方案,考虑org.netbeans.swing.etable.ETable
或其子类org.netbeans.swing.outline.Outline
,如here所示.