Java-如何在更改单元格时保存JTable?

时间:2013-01-13 17:09:57

标签: java swing jtable

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

图片:

编辑JTable时:

enter image description here

重启程序后:

enter image description here

提前致谢

编辑:

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

3 个答案:

答案 0 :(得分:2)

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

如果您不知道应用程序何时终止,add the Window closing listener并在那里保存表格模型。

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

答案 1 :(得分: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
   }
});

答案 2 :(得分:1)

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

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

唯一的问题是没有人可能会处理此事件,因此模型的更改将在重新启动时保持不变。

我相信你应该做的是: 实现一个侦听器,它将获取模型并将其序列化为文件/放入xml文件或数据库 - 无论重启后能够存活(您可以考虑最合适的格式)。

虽然我没有指出特定的类(已经提出过TableModelListener),但我认为整体解释不会对此造成伤害。

希望,这有帮助