Java 如何保存在JTable中输入的数据,以便在退出应用程序后仍能保留?

Java 如何保存在JTable中输入的数据,以便在退出应用程序后仍能保留?,java,swing,netbeans,jtable,textfield,Java,Swing,Netbeans,Jtable,Textfield,我是NetBeans的新手,我创建了一个应用程序,它由一个JTable、3个文本字段和一个按钮组成,用于将文本字段中输入的值插入JTable。到目前为止一切正常,但当我退出应用程序并重新打开它时,先前输入的数据就会被删除。 是否有一种方法可以保存输入到JTable中的数据,以便即使在退出应用程序后仍能保留这些数据???您插入到JTable中的数据不会持续存在,除非您将这些数据保存到文件系统或DB中。因此,在退出应用程序之前,您必须首先将该数据保存到任何文件系统或数据库中,然后在启动JTable时

我是NetBeans的新手,我创建了一个应用程序,它由一个JTable、3个文本字段和一个按钮组成,用于将文本字段中输入的值插入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)“但在我退出应用程序并重新打开它的那一刻,以前输入的数据将被删除。”-如果希望数据在打开时显示,您需要将数据存储在文件或数据库中,并在打开程序时检索数据