1

到目前为止,我为适当的 Java Swing 组件提供了不同的模型类,例如,我有几个TableModel用于多个JTable. 每个JTable都有自己的TableModel。它TableModel基于一个对象 ( Model),提供所有必需的数据。像这样的东西:

public class MyTableModel extends AbstractTableModel {

Model model;

但现在我想做出改变。我的界面提供了多个Model. 所以我的问题是,我该怎么办?

  • 实例化多个对象MyTable
  • 在用户交互时动态更改对模型的当前引用

所以我面临的基本问题是:我想用JTable相同的TableModel. 我应该使用多个TableModel还是应该使用更改对数据源的引用?


类似的问题:

我想提供多个选项卡,它们会更改底层模型的实例。不改变类型,而是改变当前实例——意思是,数据改变了。

我现在应该:

  • 实例化视图组件的多个对象?例如,为每个可用模型实例化一个自己的JTable、、、JPanel对象JScrollPane
  • 通过侦听选项卡式窗格上的更改事件来动态更改底层模型的参考
4

2 回答 2

2

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

如果表的结构完全改变,改变模型本身可能更容易。你也可以调用fireTableStructureChanged,但是这个方法的 javadoc 说:

这与在 JTable 上调用 setModel(TableModel) 相同

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

于 2011-06-29T13:17:11.850 回答
1

如果您要拥有多个选项卡,其中不同的选项卡具有不同的模型,那么答案很简单,您需要不同的表。每个选项卡至少一个。

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

但是,如果您打算为一张桌子设置一个位置,那么如果您没有对表格进行自定义操作,那么您可能可以使用一个 JTable 和多个模型。(见 mKorbel 的评论)。无论哪种方式,您都可以重用相同的 JScrollPane。

于 2011-06-29T13:17:55.717 回答