我是网络新手,我创建了一个应用程序,它包含一个JTable,3个文本字段和一个按钮,用于将文本中输入的值插入到JTable中。到目前为止一切正常,但是当我退出应用程序并重新打开它时,先前输入的数据将被删除。 有没有办法可以保存在JTable中输入的数据,所以它在退出应用程序后仍然保持不变?
答案 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
启动时,您需要再次从相应的存储系统中获取该数据。