【问题标题】:JTable with less row entries than displayed and sorting issues行条目少于显示和排序问题的 JTable
【发布时间】:2011-05-26 12:09:12
【问题描述】:

我正在使用 JTable 对象来显示存储到数据库中的一些数据。 现在我想达到以下结果:

即使我的 db 表的条目较少,显示的 JTable 也必须至少有 n (让它是 10 )行。空行必须始终显示在表格的末尾。

从现在开始我做了以下事情:

我实现了扩展 AbstractTableModel 的自定义表格模型。在实现的方法 getRowCount 中我做了:

public int getRowCount() {
       if (myRowCount < 10 )

           return 10;
       else 
           return myRowCount;
}

问题是:

  1. 这段代码工作正常,但我是 想知道这是否正确 实现这一结果的方法。是 这是一个好的解决方案吗?
  2. 除此之外,如果我尝试排序 我得到了不想要的输出的那一行。事实上,在排序时似乎考虑了空行,产生的结果是(例如以后代顺序对 int 列进行排序)空行显示在表的开头。我是否必须实现我的自定义 TableRowSorter 以避免这种行为,或者是否可以使用默认的 (table.setAutoCreateRowSorter(true))?

提前致谢

编辑: 我阅读了@mKorbel 与@kleopatra @camickr posts 的链接。它对我有很大帮助。但我真的想以最简洁的方式做到这一点,因为这个类在我的应用程序中非常重要。 上一个链接帖子中提出的解决方案是否足够干净?或者它有一些我现在看不到的缺点?

我开始了赏金。请给我好的建议!! 谢谢..

马可

【问题讨论】:

  • 你如何处理空行?他们在这里只是为了使用空白空间(仅用于视觉效果)还是用户可以选择它们并可能编辑它们?我问是因为仅针对视觉效果,有比您正在做的更好的方法,因为 TableModel 不应该关心视觉效果。
  • @0verbose "空行必须始终显示在表格的末尾。"可以创建 RowFilter#public boolean include(),它忽略 AbstractTableModel 中的 null 或空行,但为 ViewPort 设置背景颜色确实更好,但我对此并不满意,也没有谈论性能(对于 10 行的 JTable太)
  • @jfpoilpret:这取决于。无论如何是的,如果表格是可编辑的,用户可以选择空行并进行编辑。
  • 然后,回答问题#1,我认为您的解决方案很好(我没有看到任何可能更好的解决方案)。对于问题 #2,由于您的表模型包含(并且必须包含)空行,因此您必须在 TableRowSorter 中专门处理它们。
  • @0verbose 链接作为很好的例子(我试过更好,并且用英语描述,而不是在我的纳瓦霍语中)forums.oracle.com/forums/…forums.oracle.com/forums/… forums.oracle.com/forums/… 这些例子肯定只是 kleopatra 或 camickr可以告诉我们正确的方向...

标签: java swing sorting jtable


【解决方案1】:

如果您希望能够编辑这些空行,那么我想唯一的方法就是覆盖DefaultRowSorters getComparator(column) 方法。

编辑我认为您可以覆盖 getComparator(),或者为每一列设置一个比较器,以便检查其中一个值是否为空等。我试过了,它没有用,因为DefaultRowSorter中有空检查,还有其他问题。

不幸的是,DefaultRowSorter 中的大多数内容都是私有的,因此没有太多自定义空间。如果您想要这种行为,您必须编写自己的 RowSorter 实现。仅当此功能对您的应用非常重要时,我才建议您采用这种方法。

【讨论】:

  • @你能扩展一下你的答案吗?我需要如何修改 getComparator 行为才能满足我的要求?
  • @0verbose:对不起,我的建议是错误的。查看我的编辑。
  • @tulskiy:谢谢。我需要实现这一点。这是工作要求。无论如何,在我看来,JTable 没有处理这种情况有点奇怪。我认为显示空行的表格是很常见的情况,不是吗?
  • @0verbose:坦率地说,除了电子表格应用程序之外,我不知道有任何应用程序具有此功能。显示额外的行很常见,但以这种方式对它们进行排序并不常见。
  • @0verbose 这是唯一有用的解决方案,可以覆盖比较器。考虑一下您在 javascript 方面的要求,“”是否小于“1”?是的。出于比较的目的,它们被赋予零值,就像 javascript 一样。尝试用否定的“键”测试它,然后看看它会做什么;)[ps:我意识到这是一个 java 问题,而不是 javascript,但我在说明一个观点,而不是关于这个问题的事实]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-28
相关资源
最近更新 更多