TreeModel和TreeSelectionModel都是模型的类型。您可以获取正在使用的那些
tree.getModel();
和
tree.getSelectionModel();
其中tree是JTree类型的Object。
两者也都有设置器方法。
我的问题是:
如果我正确地得出结论,那棵树有两个模型(TreeModel和TreeSelectionModel),那么它将与MVC模式一起使用吗?
最佳答案
没错,JTree
实际上有两个模型(以及JTable
和JList
)。但是,TreeSelectionModel
被视为GUI模型,而TreeModel
是实际的应用程序数据模型,如此处所述:A Swing Architecture Overview - Oracle。
我假设您可以通过这种方式来考虑这种结构:通过JTree#getSelectionModel()
操作的模型实际上类似于包裹Decorator
的JTree#getModel()
。在这种情况下,您实际上将具有以下优势:
+-----------------------------------------------+
| +-----------+ |
| | TreeModel >-------(relation: Decorator) |
| +-----^-----+ | |
| | | |
| | +---------v----------+ |
| | | TreeSelectionModel | |
| | +---------^----------+ |
| | | |
| +-----^-------------v----+ |
| | Presenter | |
| +------------^-----------+ |
| | |
| +------------v-----------+ |
| | TreeView | |
| +------------------------+ |
| |
+------------------- JTree ---------------------+
我使用的是
Presenter
而不是Controller
,因为当View
也是Controller
时,这是实现MVC模式的方式(嗯,我想那是MVP)。这当然不是实现它的确切方法,但我认为它可能以类似的方式工作。无论如何,我认为它仍然可以很好地实现,而不必担心使用它们:)