JTable疯狂?

时间:2011-08-16 17:09:51

标签: swing user-interface jtable

我一直在阅读Swing教程“如何使用表格”,虽然它对JTable新手非常有用,但我立刻遇到了障碍,我试图转向这些例子我自己就可以了。

所以,如果你希望你的Swing应用程序有一个漂亮的自定义表,看起来它们是你将要使用的几个核心类:

  • 的JTable
  • 的TableModel
  • TableModelListener
  • TableModelEvent
  • TableColumnModel的
  • TableColumnModelListener
  • TableColumnModelEvent
  1. 仅仅是阅读教程和JavaDocs,我不明白 TableModel TableColumnModel 之间的区别是什么,以及它们与彼此。显然,列模型仅适用于单个列或所有列(?),而表模型更为通用。 但他们如何相互联系?每个人处理哪些责任? TableModel是否管理,控制或以某种方式包含TableColumnModel?

  2. 与第一个问题密切相关,我在哪个模型中指定了单元格编辑器和渲染器?

  3. 我认为,对于每个这些对象,我应该子类化/实现它们,以便我可以为我的项目自定义它们。 这是一种普遍接受的自定义表的方式(子类化JTable“核心”类),还是足以支持任何类型的表创建?

1 个答案:

答案 0 :(得分:2)

通常,您只需定义一个TableModel(通过子类化AbstractTableModel),并使用此表模型作为参数构造一个JTable实例。

如果您在表格模型中正确实施getColumnClass()JTable会自动为每个列选择合适的渲染器。如果某些单元格是可编辑的(您通过覆盖表模型中的isCellEditable()来表示),则相应的单元格编辑器也将与该列关联。当模型发生变化时,您必须触发事件(使用AbstractTableModel中的一个fireXxx方法)。

当然,如果单元格中有特殊对象(即String,Boolean,Integer等除外),则必须将渲染器与列关联(如果这些单元格中有单元格,则需要编辑器)是可编辑的)。这是通过在列模型的列上设置渲染器/编辑器来完成的。但是,JTable会从表模型中自动创建列模型。你通常不需要自己创造一个。

所以,回答你的具体问题:

  1. TableModel用于保存JTable中显示的数据。你必须自己实现它。 TableColumnModel由JTable自动创建,通常用于将渲染器和编辑器关联到特定列。
  2. 如果您想要第n列的特定渲染器,您可以从JTable的列模型中获取第n列,并在此列上设置渲染器。
  3. 通常继承AbstractTableModel就足够了。