【问题标题】:JTable with jgoodies sorting trouble带有 jgoodies 排序问题的 JTable
【发布时间】: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


【解决方案1】:

知道JTable 列可以由用户拖动可能很有用。因此,视图(JTable 或子类)和模型(TableModel 的实现)可能具有不同的列号。同样,与模型相比,RowSorter 可能会影响视图中的顺序或行数。 How to Use Tables: Sorting and Filtering中提到了相关的转换方法。特别是:“使用排序器时,请始终记住转换单元格坐标。”

附录:作为替代方案,考虑org.netbeans.swing.etable.ETable 或其子类org.netbeans.swing.outline.Outline,描述为here

【讨论】:

  • 这个相关的example 可能会提供额外的见解。
  • 谢谢,这应该得到照顾。我不得不刷新表格(根据模型),因为标题名称在拖动时弄乱了。 TabelModel 由实现 com.jgoodies.binding.adapter.AbstractTableAdapter 实现 javax.swing.table.AbstractTableModel 的 FileDisplayTableAdapter 实现。我已经阅读了我在 www 上可以找到的所有内容,但无济于事;我会看看你链接的例子。
  • 当使用与 jgoodies 框架绑定的 JTable 时,我感觉有些东西不能很好地进行排序。在我发现的一个示例中,排序代码被注释掉,并带有“禁用排序,因为它无论如何都是错误的”。
  • 这是个问题,因为RowSorter 是 1.6 中的新功能。更多内容。
  • 我终于重写了几乎整个 TableModel,摆脱了 ColumnModel(无论如何都没有使用它,因为 jgoodies TableAdapter 实例化了另一个)。现在一切正常 (github.com/taconaut/pms-mlx/tree/pms-mlx-test_project_structure/…)
猜你喜欢
  • 2012-02-26
  • 1970-01-01
  • 2016-06-02
  • 2019-04-11
  • 1970-01-01
  • 1970-01-01
  • 2011-12-06
  • 1970-01-01
  • 2012-06-18
相关资源
最近更新 更多