如何保存JTable中已编辑的信息

来源:互联网 发布:朝鲜半岛统一知乎 编辑:程序博客网 时间:2024/05/17 08:02

程序如下 :

import javax.swing.*;
import javax.swing.table.*;
import javax.swing.event.*;
import java.util.*;
import java.io.*;
import java.awt.event.*;
public class Table_2 extends JFrame
{
   JTable jtable;
   DefaultTableModel data;
   Vector v1,v2,v3,v4;
   Vector vname=new Vector();
   Vector vdata=new Vector();
   public Table_2()
   {
      data=new DefaultTableModel();
      data.addTableModelListener(new TML());
      v1=new Vector();
      v2=new Vector();
      v3=new Vector();
      v4=new Vector();
      vname.add(new Integer(1));
      vname.add(new Integer(2));
      vname.add(new Integer(3));
      vname.add(new Integer(4));
      for(int i=0;i<8;i++)
      {
         v1.add(new String("Enm-1>:"+i));
         v2.add(new String("Enm-2>:"+i));
         v3.add(new String("Enm-3>:"+i));
         v4.add(new String("Enm-4>:"+i));
      }
      vdata.add(v1);
       data.setDataVector(vdata,vname);
       /*
      data.addColumn(new Integer(1),v1);
      data.addColumn(new Integer(2),v2);
      data.addColumn(new Integer(3),v3);
      data.addColumn(new Integer(4),v4);
      */
      jtable=new JTable(data);
      jtable.setCellSelectionEnabled(false);
      this.getContentPane().add(new JScrollPane(jtable));
      this.setSize(300,300);
      this.setVisible(true);
      this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      //System.out.println(jtable.getValueAt(0,1));
   }
   class TML implements TableModelListener {
      public void tableChanged(TableModelEvent e)
      {
         if(jtable!=null)
         {
            System.out.println(jtable.getValueAt(jtable.getSelectedRow(),jtable.getSelectedColumn()));
            writeFile();
         }
    }
    }
void writeFile(){
  try{
  FileOutputStream fos=new FileOutputStream("pay.txt");
  BufferedOutputStream fis=new BufferedOutputStream(fos);
  ObjectOutputStream fas=new ObjectOutputStream(fis);
  v1=data.getDataVector();
   fas.writeObject(v1);
  // System.out.print(vector);       
   fas.flush();
   fas.close(); 
   
  }catch(Exception e){}
 
}
void  readFile(){

  try{
  FileInputStream fos=new FileInputStream("pay.txt");
  BufferedInputStream fis=new BufferedInputStream(fos);
  ObjectInputStream fas=new ObjectInputStream(fis);
  v1=(Vector)fas.readObject();
  data.setDataVector(v1,vname);   
  jtable.repaint();
  fas.close();
  }catch(Throwable e)
  {
     e.printStackTrace();
  }
  }
   public static void main(String args[])
   {
      new Table_2();
   }
}

但,我有一事不明,请指教
编辑前jtable显示:Enm-1>:0,Enm-1>:1,Enm-1>:2,Enm-1>:3
我改为: 1 , 2 , 3 , 4 ,后关闭jtable
再打开后又是: Enm-1>:0,Enm-1>:1,Enm-1>:2,Enm-1>:3

为什么再打开后还是Enm-1>:0,Enm-1>:1,Enm-1>:2,Enm-1>:3
而不是1,2,3,4

怎样修改此程序才能显示1,2,3,4(编辑jtable
后的内容)?

我初学JAVA,请多多指教

原创粉丝点击