【发布时间】:2011-05-26 12:09:12
【问题描述】:
我正在使用 JTable 对象来显示存储到数据库中的一些数据。 现在我想达到以下结果:
即使我的 db 表的条目较少,显示的 JTable 也必须至少有 n (让它是 10 )行。空行必须始终显示在表格的末尾。
从现在开始我做了以下事情:
我实现了扩展 AbstractTableModel 的自定义表格模型。在实现的方法 getRowCount 中我做了:
public int getRowCount() {
if (myRowCount < 10 )
return 10;
else
return myRowCount;
}
问题是:
- 这段代码工作正常,但我是 想知道这是否正确 实现这一结果的方法。是 这是一个好的解决方案吗?
- 除此之外,如果我尝试排序 我得到了不想要的输出的那一行。事实上,在排序时似乎考虑了空行,产生的结果是(例如以后代顺序对 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可以告诉我们正确的方向...