我正在构建一个应用程序,它基本上只是一个用于显示和编辑单个对象的GUI。由于此对象的类是使用JAXB创建的,因此它基本上是一个包含许多字符串和整数作为子项的树,但也有一些List<E>
。对于每个简单的子代,JAXB提供了一个getter和一个setter,但是对于所有列表,只提供了一个getter,因为它提供了对内部列表的引用,现在可以对其进行修改。
由于我需要在单独的 swing GUI组件中显示每个孩子(以及分支),我需要这些视图来处理一些数据。根据我目前对模型视图控制器设计模式的了解,我应该严格将模型与视图分开。在此之后,让JList
直接在我的基础对象的内部列表上操作是个坏主意。 (实际上这样做对我的特定用例来说是一个非常简单的解决方案,但由于以后可能会添加其他功能,我想我应该避免这个想法。)
然后我开始思考:如果我不让组件直接在列表上工作,我必须让它们使用原始的副本。但由于我无法将原始列表设置为GUI组件返回的新列表,因此在将视图数据保存到模型时,我必须再次复制项目。此外,分发对自定义ListModel
的内部列表的引用是不明智的,这意味着,根据GUI结构的深度,列表可能会被复制多次。
由于我也希望我的应用程序高效,这似乎也不是正确的方法。如何“正确”构建这个?
要点:
原始对象的List<E>
是对内部列表的引用
对象。
显示列表的JList
不应该获得此引用,
因此必须复制清单。
从JList
获取列表不应该产生
也可以引用内部列表,因此必须再次复制。
将列表保存到原始对象必须将列表复制第三个 时间,因为原始对象没有列表的setter方法。 (看到 以上详情)
我对这是正确的把握吗?如何正确构建并使其高效?
P.S:将setter方法添加到原始类结构不是一种选择!
答案 0 :(得分:1)
是使用
JAXB
创建的,它基本上是一个包含许多字符串的树 整数作为孩子,但也有一些List<E>
。对于每一个 简单子JAXB
提供了一个getter和一个setter,但适用于所有列表 只提供一个getter,因为它提供了对内部的引用 列表,现在可以修改。
见
答案 1 :(得分:1)