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

时间:2014-02-19 07:34:11

标签: java swing netbeans jtable textfield

我是网络新手,我创建了一个应用程序,它包含一个JTable,3个文本字段和一个按钮,用于将文本中输入的值插入到JTable中。到目前为止一切正常,但是当我退出应用程序并重新打开它时,先前输入的数据将被删除。 有没有办法可以保存在JTable中输入的数据,所以它在退出应用程序后仍然保持不变?

2 个答案:

答案 0 :(得分:4)

为此,您需要将数据存储在某个位置(db,file或其他)。将数据从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) {
                }
        }
    }
}

答案 1 :(得分:1)

您插入JTable的数据不会持续存在,除非您将该数据保存在文件系统或数据库中。因此,在退出应用程序之前,您必须先将该数据保存到任何文件系统或数据库中,然后在JTable启动时,您需要再次从相应的存储系统中获取该数据。