我的JPanel中有一个JTable,我想知道如何保存已编辑的单元格。现在发生的是当我编辑一个单元格并按下ENTER时,会显示新数据。但是当我关闭程序并再次打开它时,数据会变回原来的状态。
图片:
编辑JTable时:
重启程序后:
提前致谢
编辑:
我想尝试从项目中的.txt文件中获取数据。我真的不确定该怎么做。我不知道如何将保存的数据存入.txt文件或如何将其实现为JTable。
答案 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),但我认为整体解释不会对此造成伤害。
希望,这有帮助