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

程序如下 :

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,请多多指教

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在JTable编辑数据并保存,可以按照以下步骤进行操作: 1. 创建JTable对象并设置TableModel。 ```java DefaultTableModel model = new DefaultTableModel(); JTable table = new JTable(model); ``` 2. 向TableModel添加数据。 ```java model.addRow(new Object[]{"John", "Doe", 25}); model.addRow(new Object[]{"Jane", "Doe", 30}); ``` 3. 设置JTable编辑模式为可编辑。 ```java table.setEditable(true); ``` 4. 添加一个按钮,用于保存数据。 ```java JButton saveButton = new JButton("Save"); saveButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // 在此处编写保存数据的代码 } }); ``` 5. 在按钮的ActionListener编写保存数据的代码。可以使用TableModel的getValueAt()方法来获取单元格,并将其保存到文件或数据库。 ```java public void actionPerformed(ActionEvent e) { for (int row = 0; row < model.getRowCount(); row++) { String firstName = model.getValueAt(row, 0).toString(); String lastName = model.getValueAt(row, 1).toString(); int age = Integer.parseInt(model.getValueAt(row, 2).toString()); // 在此处将数据保存到文件或数据库 } } ``` 6. 将按钮添加到容器,并显示窗口。 ```java JFrame frame = new JFrame(); frame.getContentPane().add(new JScrollPane(table), BorderLayout.CENTER); frame.getContentPane().add(saveButton, BorderLayout.SOUTH); frame.setSize(400, 300); frame.setVisible(true); ``` 以上就是在JTable编辑数据并保存的基本步骤。您可以根据需要进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值