用于多组数据的Java tablemodel

时间:2012-04-11 16:47:10

标签: java swing jlist tablemodel

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

情况

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

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

目标

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

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

我的想法

是否让tablemodel有一个方法来更改内部集合,并带有customer参数。当jList中的索引发生更改时,应调用该方法,以便jTable表示已为客户完成的Job。 当我必须编辑/创建/删除作业时,更改始终先在 tablemodel 上完成,会将更改传播到{{1} } object (如果是新工作或删除工作)。

问题

这是实施它的好方法吗?我感觉它不是,因为如果我忘记通过tablemodel对customer进行任何更改,直接在JobCustomer上进行更改不一致和麻烦。还有更好的方法吗?如果它涉及改变其他东西,我不介意。

(可选)小子问题

我对java中的不同Job缺乏一些了解。我通常只使用Collection,就像ArrayList中的(可变)作业一样。有没有更好的收藏?

1 个答案:

答案 0 :(得分:2)

不是说这是实现这一目标的最佳方法,但这就是我要做的事情

  • 确保客户的工作清单是可观察的。通过使用提供触发事件的集合的第3方lib(我认为Google有一些可用),或者只是确保更新Customer集合的Job上的每个方法触发事件
  • 表示特定Job的{​​{1}}的表模型可以侦听这些事件并相应地更新自己
  • 目前还不清楚是否允许对表ui进行更改,但如果这样做,表模型应负责将这些更改再次传播到Customer

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

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