Java 如何保存在JTable中输入的数据,以便在退出应用程序后仍能保留?
我是NetBeans的新手,我创建了一个应用程序,它由一个JTable、3个文本字段和一个按钮组成,用于将文本字段中输入的值插入JTable。到目前为止一切正常,但当我退出应用程序并重新打开它时,先前输入的数据就会被删除。Java 如何保存在JTable中输入的数据,以便在退出应用程序后仍能保留?,java,swing,netbeans,jtable,textfield,Java,Swing,Netbeans,Jtable,Textfield,我是NetBeans的新手,我创建了一个应用程序,它由一个JTable、3个文本字段和一个按钮组成,用于将文本字段中输入的值插入JTable。到目前为止一切正常,但当我退出应用程序并重新打开它时,先前输入的数据就会被删除。 是否有一种方法可以保存输入到JTable中的数据,以便即使在退出应用程序后仍能保留这些数据???您插入到JTable中的数据不会持续存在,除非您将这些数据保存到文件系统或DB中。因此,在退出应用程序之前,您必须首先将该数据保存到任何文件系统或数据库中,然后在启动JTable时
是否有一种方法可以保存输入到JTable中的数据,以便即使在退出应用程序后仍能保留这些数据???您插入到
JTable中的数据不会持续存在,除非您将这些数据保存到文件系统或DB中。因此,在退出应用程序之前,您必须首先将该数据保存到任何文件系统或数据库中,然后在启动JTable
时,您需要再次从相应的存储系统获取该数据 为此,您需要将数据存储在某个位置(数据库、文件或其他)。将数据从TableModel
序列化到文件,然后将其还原到JTable
的最简单方法。请尝试下一个简单示例:
import java.awt.BorderLayout;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
public class Example extends JFrame {
private JTable t1;
public Example(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
initComponents();
setVisible(true);
pack();
}
public static void main(String...strings ){
new Example();
}
private void initComponents() {
t1 = new JTable(getModel());
add(new JScrollPane(t1),BorderLayout.NORTH);
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
storeTableModel((DefaultTableModel) t1.getModel());
}
});
}
private TableModel getModel() {
DefaultTableModel model = new DefaultTableModel(3,3);
ObjectInputStream ois = null;
try {
ois = new ObjectInputStream(new FileInputStream("c:\\test"));
Vector data = (Vector) ois.readObject();
Vector<Object> cols = new Vector<>();
for(int i=1;i<=data.size();i++){
cols.add(i);
}
model.setDataVector(data, cols);
} catch (Exception e) {
e.printStackTrace();
} finally{
if(ois != null)
try {
ois.close();
} catch (IOException e) {
}
}
return model;
}
public void storeTableModel(DefaultTableModel model) {
ObjectOutputStream oos = null;
try {
oos = new ObjectOutputStream(new FileOutputStream("c:\\test"));
oos.writeObject(model.getDataVector());
} catch (Exception e) {
e.printStackTrace();
} finally{
if(oos != null)
try {
oos.close();
} catch (IOException e) {
}
}
}
}
导入java.awt.BorderLayout;
导入java.io.FileInputStream;
导入java.io.FileOutputStream;
导入java.io.IOException;
导入java.io.ObjectInputStream;
导入java.io.ObjectOutputStream;
导入java.util.Vector;
导入javax.swing.JFrame;
导入javax.swing.JScrollPane;
导入javax.swing.JTable;
导入javax.swing.table.DefaultTableModel;
导入javax.swing.table.TableModel;
公共类示例扩展了JFrame{
专用JTable t1;
公共示例(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
初始化组件();
setVisible(真);
包装();
}
公共静态void main(字符串…字符串){
新例子();
}
私有组件(){
t1=新的JTable(getModel());
添加(新的JScrollPane(t1),BorderLayout.NORTH);
Runtime.getRuntime().addShutdownHook(新线程(){
公开募捐{
storeTableModel((DefaultTableModel)t1.getModel());
}
});
}
私有表模型getModel(){
DefaultTableModel=新的DefaultTableModel(3,3);
ObjectInputStream ois=null;
试一试{
ois=新对象输入流(新文件输入流(“c:\\test”);
向量数据=(向量)ois.readObject();
向量cols=新向量();
对于(int i=1;i)“但在我退出应用程序并重新打开它的那一刻,以前输入的数据将被删除。”-如果希望数据在打开时显示,您需要将数据存储在文件或数据库中,并在打开程序时检索数据