【问题标题】:How to warn the user when edited data in UI so I can warn them of overwriting, or prompt them to save? (Java)如何在 UI 中编辑数据时警告用户,以便我可以警告他们覆盖,或提示他们保存? (爪哇)
【发布时间】:2012-12-30 00:14:18
【问题描述】:

如何在用户界面中编辑数据时警告用户,以便在他们从其他来源加载时警告他们覆盖,或提示他们保存? (JavaFX2.2)

我将在多个选项卡和 2 或 3 个带有添加和删除行的按钮的表格中拥有 50 多个文本字段。

我想知道是否有一个全局“isDirty”布尔标志并且可以在按钮上设置 onAction 处理程序,但我必须在每个文本字段和文本区域上设置onKeyTyped 处理程序吗? (它会减慢速度吗?)。 Java 是否会跟踪是否有任何字段被编辑,如果是,我可以从中捕获该信息吗?

【问题讨论】:

  • 将所有数据保存在单独的数据模型中,并将数据模型与文本字段和表格的内容进行比较,作为加载和保存操作的侦听器,可能会更容易。
  • 拥有数据模型只会让事情变得更糟恕我直言——尽管显然我确实有一个用于表格的 ArrayList(一个“数据模型”)。这些是设备的配置参数。我正在从设备读取数据并将其放在屏幕上。可以连接多个设备,我们可以从一个设备保存到另一个设备 - 因此存在覆盖未保存数据的危险。
  • 如果您不想比较两个模型,另一种选择是使用新类“dirty”更新已更新的任何字段的标签。然后,您可以搜索任何脏字段并适当地处理它们。
  • @Zylth 你能解释一下'更新标签......用新的脏类'吗?
  • 这将比后端更适合 UI,但要实现任何更改的处理程序,然后更新文本字段的类以包含“脏”

标签: java javafx-2


【解决方案1】:

一个可能干净的解决方案是拥有一种 MyWholeDataset 类,该类在 UI 启动时填充数据,以及另一个用于实际 UI 显示的“克隆”对象。 然后,每次用户从 UI 更改数据时,您都会更改第二个对象(克隆的对象)。 最后,您应该实现 Comparable 接口。这告诉您存在差异,然后您可以使用某种“getDeltas”方法,该方法返回一组不同的字段名称或返回字段名称作为键的 hasmap 和包含旧/新的对象值对作为值。

【讨论】:

  • 这听起来和上面吉尔伯特的评论很相似。
  • 是的,就正确的 OOP 而言,这应该是“The Way”。我只是想澄清一下,因为 Gilbert 没有写过如何比较“原始”和“GUI 修改”模型。在我看来,最好的解决方案是使用 Comparable 接口,让模型与自己进行比较,并提供一种检索差异集的方法。就是这样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-01
  • 2019-10-20
  • 2011-09-28
  • 1970-01-01
  • 2012-03-20
  • 1970-01-01
  • 2016-07-17
相关资源
最近更新 更多