JavaSwing中模型组件的多个实例?

JavaSwing中模型组件的多个实例?,java,model-view-controller,swing,jtable,tablemodel,Java,Model View Controller,Swing,Jtable,Tablemodel,到目前为止,我为相应的JavaSwing组件提供了不同的模型类,例如,我为几个JTable提供了几个TableModel。每个JTable都有自己的TableModel。TableModel基于一个对象(Model),提供所有必需的数据。大概是这样的: public class MyTableModel extends AbstractTableModel { Model model; 但现在我想做个改变。我的界面提供了模型的多个实例的可能性。所以我的问题是,我应该怎么做 从MyTable

到目前为止,我为相应的JavaSwing组件提供了不同的模型类,例如,我为几个
JTable
提供了几个
TableModel
。每个
JTable
都有自己的
TableModel
TableModel
基于一个对象(
Model
),提供所有必需的数据。大概是这样的:

public class MyTableModel extends AbstractTableModel {

Model model;
但现在我想做个改变。我的界面提供了
模型
的多个实例的可能性。所以我的问题是,我应该怎么做

  • MyTable
  • 在用户交互时动态更改对模型的当前引用
因此,我面临的基本问题是:我想使用相同的
JTable
和相同的
TableModel
。我应该使用多个
TableModel
还是应该使用对数据源的更改引用


类似问题:

我想提供多个选项卡,它们更改基础模型的实例。不会更改类型,但会更改当前实例-也就是说,数据会更改

我现在应该:

  • 实例化视图组件的多个对象?例如,为每个可用模型实例化一个自己的
    JTable
    JPanel
    JScrollPane
    对象
  • 通过侦听选项卡式窗格上的更改事件(即underyling模型的引用)动态更改

如果表的结构保持不变(即相同的列数、相同的标题、相同的列类),并且只有其内容发生了更改,则应保持相同的模型实例,但更改数据(并调用
fireTableDataChanged
)。 这将更有效,并允许保持当前列顺序、当前已排序列等


如果表的结构完全更改,则更改模型本身可能更容易。您也可以调用
fireTableStructureChanged
,但此方法的javadoc说明:

这和打电话一样 JTable上的setModel(TableModel)


关于选项卡,可以遵循相同的规则。

如果您将有多个选项卡,并且不同的选项卡具有不同的型号,那么答案很简单,您需要不同的表。每个选项卡至少有一个

同样,如果您有多个选项卡,那么您还需要多个JSCRollPane等


然而,如果您要为一个表设置一个点,那么如果您没有对表进行自定义,那么您可能可以使用一个JTable和多个模型。(见mKorbel的评论)。无论哪种方式,您都可以重用同一个JScrollPane。

对我来说,每个JTable都有自己的TableModel,因为每个JTable都可以有不同的TableModel(Defalut/Abstract)、不同的ColumnModel、RowModel、RowFilter、RowSorter、MVC规则,并以prepareRenderer中的定义结尾,总之,好问题+1