我一直在阅读Swing教程“如何使用表格”,虽然它对JTable新手非常有用,但我立刻遇到了障碍,我试图转向这些例子我自己就可以了。
所以,如果你希望你的Swing应用程序有一个漂亮的自定义表,看起来它们是你将要使用的几个核心类:
仅仅是阅读教程和JavaDocs,我不明白 TableModel 和 TableColumnModel 之间的区别是什么,以及它们与彼此。显然,列模型仅适用于单个列或所有列(?),而表模型更为通用。 但他们如何相互联系?每个人处理哪些责任? TableModel是否管理,控制或以某种方式包含TableColumnModel?
与第一个问题密切相关,我在哪个模型中指定了单元格编辑器和渲染器?
我认为,对于每个这些对象,我应该子类化/实现它们,以便我可以为我的项目自定义它们。 这是一种普遍接受的自定义表的方式(子类化JTable“核心”类),还是足以支持任何类型的表创建?
答案 0 :(得分:2)
通常,您只需定义一个TableModel(通过子类化AbstractTableModel
),并使用此表模型作为参数构造一个JTable实例。
如果您在表格模型中正确实施getColumnClass()
,JTable
会自动为每个列选择合适的渲染器。如果某些单元格是可编辑的(您通过覆盖表模型中的isCellEditable()
来表示),则相应的单元格编辑器也将与该列关联。当模型发生变化时,您必须触发事件(使用AbstractTableModel中的一个fireXxx方法)。
当然,如果单元格中有特殊对象(即String,Boolean,Integer等除外),则必须将渲染器与列关联(如果这些单元格中有单元格,则需要编辑器)是可编辑的)。这是通过在列模型的列上设置渲染器/编辑器来完成的。但是,JTable会从表模型中自动创建列模型。你通常不需要自己创造一个。
所以,回答你的具体问题: