繁体   English   中英

带有JTree的Java Swing应用程序-MVC设计:在结构上将TreeModel对象放置在哪里?

[英]Java Swing Application with a JTree - MVC Design: Where to position a TreeModel object architecturally?

请原谅这个问题的冗长性,因为在撰写本文时,我正在尝试思考我的设计问题!

我继承了一个Swing应用程序,该应用程序需要重新架构到RMI应用程序中。 客户要求Swing GUI在本地运行并通过RMI与远程Server进程通信,该进程包含Controller类,该类在EventListener刺激时将调用定向到业务逻辑部分和后端数据库持久性,从而弥合了Swing Client之间的差距和控制器。

我要实现MVC设计,以允许开发新的视图以用于服务器。

当前,Swing Client GUI包含一个JTree,它使用DefaultTreeModel填充。 该模型是使用DefaultMutableTreeNode对象构造的,这些对象通过位于这些对象与我的数据源之间的BusinessObject映射器填充了Business Object状态。

我对理解Client和TreeModel的链接方式没有任何问题:我已经建立了TreeModelListener来寻找对TreeModel的更改。 如果TreeModel对象更改,则通过调用JTree的treeHasChanged()方法来重绘JTree。

但是,我很想知道是什么过程会刺激TreeModel,以便用数据库中的最新数据重新填充其内容,这又将调用TreeModelListener来更新GUI的Jtree。 谁应该“拥有” TreeModel? 模型中的Class是否应该构成Controller状态的一部分? GUI的EventListener在控制器中的操作是否应该硬调用运行例程以刷新TreeModel?

或者,TreeModel是GUI窗口小部件的扩展,在这种情况下,它是View组件? 如果是这样,调用此对象状态的刷新的正确方式是什么?

我可能应该指出,最近几天我一直在考虑观察者和侦听器,因此我可能会因试图调用行为而被解雇,从而感到内gui。

您的,非常困惑!

我不确定您是否描述AbstractTreeModel或DefaultTreeModel ,我认为这篇文章了解TreeModel仍然是最好的选择,并链接到JTree教程。

为了获得真正的帮助,您必须在SSCCE表格中编辑问题并张贴headache图像, 是创建SSCCE

除了@mKorbel的信息性链接和@Shakedown的注释之外,还可以考虑使用SwingWorker周期性地破坏中间层并更新TreeModel ,也许是响应Timer 有一个相关的例子在这里 ; 请注意,GUI在查询运行时保持响应。 当然,由您的应用程序决定运行更新的频率以及更新GUI的频率。

我已经解决了这个问题。

我认为将Swing API包含在我的应用程序模型中是一个坏主意,因为我的应用程序可以采用许多不同类型的UI(Headless,Swing,Web)。

因此,我认为正确的方法是让TreeModel对象驻留在View中,并由View Helper填充,该View Helper可向任何感兴趣的UI提供对Model层的通用表示形式的访问。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM