gpt4 book ai didi

java - JList 和 ListModel 设计模式建议

转载 作者:行者123 更新时间:2023-12-02 07:07:27 25 4
gpt4 key购买 nike

我正在构建一个应用程序,它基本上只是一个用于显示和编辑单个对象的 GUI。由于该对象的类是使用 JAXB 创建的,它基本上是一棵有许多字符串和整数作为子项的树,但也有一些 List<E> s。对于每个简单的子级,JAXB 提供了一个 getter 和一个 setter,但对于所有列表,仅提供了一个 getter,因为它提供了对内部列表的引用,现在可以修改该内部列表。

由于我需要单独的 swing GUI 组件中显示每个子项(以及与此相关的分支),因此我需要这些 View 来处理一些数据。根据我目前对 Model View Controller 设计模式的了解,我应该严格将模型与 View 分开。在此之后,让 JList 是一个坏主意。直接对我的基础对象的内部列表进行操作。 (实际上,对于我的特定用例来说,这样做是一个非常简单的解决方案,但由于稍后可能会添加其他功能,所以我认为我应该避免这个想法。)

然后我开始思考:如果我不让组件直接在列表上工作,我必须让它们使用原始组件的副本。但由于我无法将原始列表设置为 GUI 组件返回的新列表,因此在将 View 数据保存到模型时,我必须再次复制这些项目。此外,分发对自定义 ListModel 的内部列表的引用也是不明智的。 ,这意味着根据 GUI 结构的深度,列表可能会被复制多次。

由于我也希望我的应用程序高效,因此这似乎也不是正确的方法。我如何“正确”地构建这个?

摘要:

  • List<E>原始对象是对内部列表的引用对象。

  • JList显示列表不应获得此引用,因此它必须复制列表。

  • JList 获取列表不应产生也引用内部列表,因此必须再次复制它。

  • 将列表保存到原始对象必须将列表复制第三次时间,因为原始对象没有列表的 setter 方法。 (看详情见上文)

我的理解正确吗?我如何正确构建它并使其高效?

P.S:在原始类结构中添加setter方法不是一个选项!

最佳答案

was created with JAXB, it is basically a tree with many Strings and integers as children, but there are also some List<E>s. For each simple child JAXB provides a getter and a setter, but for all lists only a getter is provided, since it gives a reference to the internal list, which can now be modified.

参见

关于java - JList 和 ListModel 设计模式建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15922346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com