2

我的 JPanel 中有一个 JTable,我想知道如何保存已编辑的单元格。现在发生的情况是,当我编辑一个单元格并按 ENTER 时,会显示新数据。但是当我关闭程序并再次打开它时,数据会变回原来的样子。

图片:

编辑 JTable 时:

在此处输入图像描述

重启程序后:

在此处输入图像描述

提前致谢

编辑:

我想尝试从项目中的 .txt 文件中获取数据。我不确定该怎么做。我不知道如何将保存的数据放入 .txt 文件或如何将其实现到 JTable 中。

4

3 回答 3

2

您可能使用的DefaultTableModel(因为您没有谈论任何其他)是可序列化的。使用JTable.getModel()获取它并在关闭时使用 ObjectOutputStream 写入文件。在程序启动时,使用ObjectInputStream将其加载回来并为表设置。

如果您不知道您的应用程序何时终止,请添加窗口关闭侦听器并将您的表模型保存在那里。

当然,还有许多其他方法可以在运行之间保存表格。

于 2013-01-13T17:18:29.080 回答
2

您应该使用 TableModelListeners 的方法,并在发生变化时触发写入磁盘(以与加载数据时使用的格式相同的格式)。所以,写一些像

myTable.getModel().addTableModelListener(new TableModelListener() {
   @Override
   public void tableChanged(TableModelEvent e) {
       // access the values of the model and save them to the file here
   }
});
于 2013-01-13T17:59:57.683 回答
1

Swing 在构建时考虑了 MVC。您可能知道 MVC 代表模型视图控制器。所以模型是包含数据的东西,它与视图分离,视图是数据的图形表示。

该模型是默认表模型(或者您可能有其他实现)。视图本身就是一个 JTable。现在它是这样工作的:控制器更改模型。模型将事件发送给任何有兴趣了解此类更改的人。在这种情况下,控制器也是一个 JTable(它允许编辑的部分)。因此,实际上在您编辑单元格之后,位于 JTable 后面的表格模型会发生变化(请记住,控制器知道谁是它的模型,所以它会更改它)。现在模型说(在摇摆中它发送事件):“我变了” - 所以有一个变化事件。

唯一的问题是可能没有人处理此事件,因此模型的更改将在重新启动后持续存在。

我相信您应该做的是:实现一个侦听器,该侦听器将采用模型并将其序列化到文件中/放入 xml 文件或数据库中 - 无论在重启后仍然存在(您可以考虑最合适的格式)。

虽然我没有指出特定的类(已经建议使用 TableModelListener),但我认为这里的整体解释不会有害。

希望这可以帮助

于 2013-01-13T18:22:00.903 回答