Java表模型设计

时间:2020-03-06 15:04:33  来源:igfitidea点击:

我有一个创建修改项目表的表类。我想使用表模型在JTable中显示这些项目。对我来说,表模型属于我的GUI软件包,但是表需要表模型才能进行更改,而表模型需要表类才能显示它,因此我无法将两者分开。如果我们需要这样做,我们将使用什么类结构?还是我的思维顺畅,它们属于同一个包装?

解决方案

表格模型不需要了解任何关于放入表格的信息。我将表格模型放入模型包中,并将表格放入视图包中。控制器负责向模型的模型包询问,向表的视图包询问以及在表中设置该模型。

对我而言,表模型是小部件(即GUI)的一部分。我不会在我的业务逻辑类中依赖javax.swing包。

因此,我们将使用适配器或者其他机制从业务层加载表模型,但是这种分离度可能会很有用。

决定还取决于项目的规模,并且可能比这复杂得多。例如。有关更多抽象案例,请参阅jgoodies绑定框架和文档。

模型是保存数据的位。它应该像这样的模型那样维护和解雇监听器。

现在,我们可能希望在模型内进行某种委托来转换数据或者修改类型。因此,我们将数据存储在模型对象中,该对象不一定与javax.swing.table有关。然后实现一个委托给基础模型的TableModel。使用该TableModel创建一个JTable,但不引用其基础模型。

TableModel是适配器。我总是写表模型来扩展AbstractTableModel,并将其作为我的GUI面板类的私有内部类。我们只需要填写一些方法即可:getRowCountgetColumnCountgetValueAt

GUI类应该可以访问某些控制器,该控制器可以在其中填充此信息。当控制器发现有关数据的更新时,它应该通知GUI类,然后该类可以调用AbstractTableModel.fireTableDataChanged或者其他适当的方法。

永远不要使用DefaultTableModel类,因为这样我们就必须使表模型的数据与控制器的数据保持同步。如我所说,表模型是一个适配器,它以" JTable"可以理解的方式显示控制器的数据

我强烈建议任何从事重要的表或者列表驱动开发的人看看我多年编写的自定义TableModel和CellRenderers,与JGoodies绑定的Glazed Lists等。从来没有一样Glazed Lists的方法令人惊讶。

GL具有两个特性,使其成为基于列表的数据绑定和处理的首选框架:

  • 非常非常容易做我们想做的正常事情
  • 使我们可能要做的事情真的非常难

看一看,看看我们是否印象深刻。我强烈建议我们使用示例应用程序,然后观看一些屏幕投影,以指导我们完成实际的编码过程。