到目前为止,我为相应的Java Swing组件设置了不同的模型类,例如,我为多个TableModel
提供了多个JTable
。每个JTable
都有自己的TableModel
。 TableModel
基于一个对象(Model
),提供所有必需的数据。像这样:
public class MyTableModel extends AbstractTableModel {
Model model;
但现在我想做出改变。我的界面提供了多个Model
实例的可能性。所以我的问题是,我该怎么做?
MyTable
所以我面临的基本问题是:我想使用相同的JTable
TableModel
。我应该使用多个TableModel
还是应该使用更改对数据源的引用?
类似的问题:
我想提供多个标签,它们会更改底层模型的实例。不要改变类型,而是改变当前实例 - 意思是数据改变。
我现在应该:
JTable
,JPanel
,JScrollPane
对象?答案 0 :(得分:2)
如果表的结构保持不变(即相同数量的列,相同的标题,相同的列类),并且只更改其内容,则应保留相同的模型实例但更改数据(并调用{{1 }})。 这将更有效,并将允许保持当前列顺序,当前排序列等
如果表的结构完全改变,更改模型本身可能更容易。您也可以调用fireTableDataChanged
,但此方法的javadoc说:
这跟打电话一样 JTable上的setModel(TableModel)
关于选项卡,可以遵循相同的规则。
答案 1 :(得分:1)
如果您要使用具有不同模型的不同选项卡的多个选项卡,那么答案很简单,您需要不同的表。每个标签至少有一个。
同样,如果你有多个标签,那么你还需要多个JScrollPanes等等。
但是,如果您要为表创建一个单独的位置,如果您没有对表进行自定义操作,则可以使用单个JTable和多个模型。 (见mKorbel的评论)。无论哪种方式,您都可以重用相同的JScrollPane。