多组数据的Java表模型

标签 java swing jlist tablemodel

我目前正在构建一个 Java GUI 应用程序,我将要实现一些似乎需要大量思考的东西,至少对于像我这样相对缺乏经验的人来说是这样。

情况

如下:我在域级别有一个类 Customer,它包含作业的集合,这也是一个类 (Job)。该应用程序适用于一家虚构的园艺公司,该公司希望管理其客户及其为客户所做的工作。

在 GUI 级别,我为所有客户提供了一个 jList,其中包含一个扩展 AbstractListModel 的自定义列表模型。我的应用程序的这一部分工作得很好,我可以轻松地添加/编辑/删除客户。

目标

现在要实现一个 jTable,它应该显示 在 jList 中选择的客户的工作

毫无疑问,我需要一个自定义的 TableModel,问题是:从哪里获取数据?需要注意的是,Customer类中的作业集合是一个ArrayList,该类没有直接返回这个ArrayList的方法,只能获得一个副本,因为我不希望直接从公共(public)上下文中改变类中的集合。

我的想法

就是让tablemodel有一个改变内部集合的方法,有一个customer参数。当 jList 中的索引发生变化时,应调用该方法,以便 jTable 表示已为客户完成的 Job。 当我必须编辑/创建/删除一项工作时,更改总是首先在表模型上完成,这将将更改传播给客户对象(在新工作或工作被移除的情况下)。

问题

这是实现它的好方法吗?我觉得不是,因为如果我忘记通过表模型以及CustomerJob 进行任何更改直接Job,会有不一致和麻烦。有更好的方法吗?如果涉及更改其他内容,我不介意。

(可选)小子问题

我对 java 中的不同 Collection 缺乏一些了解。我通常只使用 ArrayList,就像在这种情况下在 Customer 中用于(可变)作业。有更好的 Collection 吗?

最佳答案

不是说这是最好的实现方式,但我会这样做

  • 确保客户工作列表是可见的。通过使用提供触发事件集合的第 3 方库(我认为 Google 有一些可用的),或者只是确保 Customer 上更新 Job 的每个方法收集火灾事件
  • 代表某个CustomerJob 的表模型然后可以监听这些事件并相应地更新自身
  • 尚不清楚您是否允许对表 ui 进行更改,但如果允许,表模型应负责将这些更改再次传播给 Customer

因此您当前的编辑/创建/删除/添加作业代码没有任何变化。这会一直与您的 Customer 合作,甚至不知道 TableModel 的存在。 TableModel 也直接针对 Customer 工作,甚至不知道可能有 UI 来编辑/创建/删除/添加作业。它只是监听对作业集合所做的任何更改并相应地更新自身。

通过表模型对代码所有部分中的作业列表进行更改似乎是一个非常糟糕的主意。 Customer 是您的模型,JTable 是 View (MVC 模式任何人)。 JTable 需要模型的不同表示(TableModel)这一事实是一种副作用。

关于多组数据的Java表模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10110363/

相关文章:

java - JList 文本对齐

Java时间: local date time without zone

java - 提交同一 jsp 中存在的第二个表单时出错...需要建议

java - 如何将元素添加到现有的 JList

Java Swing Gridlayout 垂直约束

java - 用户选择要在Java中绘制的颜色和形状后尝试绘制矩形/椭圆形

java - JList高亮行问题

java - Maven shade插件将dependency-reduced-pom.xml添加到基本目录

java - 如何在 Parcel 中使用 writeStringArray() 和 readStringArray()

java - JXTable + GlazedLists + 在拖动选择期间更新 = 问题