【问题标题】:Java Swing: List Models and CollectionsJava Swing:列出模型和集合
【发布时间】:2011-10-05 19:32:04
【问题描述】:

我目前正在编写一个程序,该程序在 GUI 方面和数据存储方面之间存在大量代码重复,我想知道我提出的解决方案是否遵循可接受的设计原则。

基本上,我有一些数据对象,其中有一个包含更多信息的列表。然后 GUI 显示该对象和一个 JList,该 JList 显示 Data 对象列表中的所有信息。在 GUI 中,用户可以向对象列表添加或删除信息,这在 JList 中直观地体现出来。

但是,这导致我不得不分别维护 GUI JList 和对象列表:

private void addInformation(String s) {
    this.listmodel.addElement(s);
    this.dataObject.getList().add(s);
}

(显然这是一个非常简单的例子,但你明白了)。这也意味着我使用了两倍的内存来保存两个列表。我是否可以创建一个实现 ListModel 和 List 接口的类,然后只需要更新单个组合列表/列表模型?我仍在 uni 学习,我希望在其他人的可维护性和遵守最佳实践方面尽可能地使这个项目做到最好。

【问题讨论】:

标签: java swing collections model jlist


【解决方案1】:

您的 GUI 不应保存有关数据模型状态的信息。最好将其分离为模型-视图-控制器 (MVC) 设计。控制器负责创建对象并相应地更新模型和视图。您的实际视图应该只负责通过将参数传递给它来显示屏幕显示。这样视图和模型就不需要相互了解任何信息,并且只有一个数据模型。

如果您必须使两个列表保持一致,那么您的设计就有问题,并且可能会在代码中引入更多错误。

here for MVC details.

【讨论】:

    【解决方案2】:

    我建议您使用 ListModel 接口的实现(例如 DefaultListModel)来保存您的数据。然后bind it 到你的 JList。如果默认渲染器不适合,请编写您自己的自定义 ListCellRenderer 和 apply 到 JList 对象。

    【讨论】:

      【解决方案3】:

      Java Swing 使用separable model architecture 来最小化模型(例如ListModelTable Model)和相应视图(JListJTable)之间的耦合。你没有使用更多的内存。

      【讨论】:

        猜你喜欢
        • 2017-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-12
        相关资源
        最近更新 更多