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 中
  • 最好它应该支持数据绑定(bind)
  • 支持交替行颜色
  • 行排序

  • 在某些时候,可以打开一个编辑对话框,其中必须检索行的内容,可以编辑,并且在保存时必须更新该行。

    在重做整个事情之前,我想确保该组件能够处理我想用它做的所有事情。

    我更习惯于在 Visual Studio 中使用 .NET 创建 GUI。用swing做同样的事情是完全不同的,而且要困难得多。请告诉我我错了:)

    [编辑] 如果有人愿意重现该问题,请获取源代码或二进制文件,启动应用程序,导航到媒体库选项卡。在一般部分通过添加一些视频文件导入一些视频。转到库部分,单击应用以刷新列表并尝试对表格进行排序。

    最佳答案

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

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

    关于java - JTable 与 jgoodies 排序麻烦,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7172097/

    10-12 18:13