为什么我想把我的Resultset里面的东西依次放进一个Defaulttablemodel里面的时候,我先将当前这行数据放入一个vector里面,然后用addRow(),这个方法,传一个vector进去,为什么我每次放完一行后不能使用vector的clear方法,然后又将resultset的下一行数据放进去,然后将这行数据又放进defaulttablemodel里面?

解决方案 »

  1.   

    你用addRow方法添加进去一个vector后,这一行的数据就由这个vector对象决定了,你修改这个vector对象的同时也在修改这一行的数据
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.table.*;
    import java.util.*;public class TableTest 
    {
    public static void main(String[] args)
    {
    final DefaultTableModel model = new DefaultTableModel(new String[] {"编号", "姓名"}, 0);
    final Vector<String> vector = new Vector<String>();
    vector.add("1");
    vector.add("张三");
    model.addRow(vector);
    JTable table = new JTable(model);

    JFrame frame = new JFrame();
    frame.setLayout(new BorderLayout());
    frame.add(new JScrollPane(table), BorderLayout.CENTER);
    JButton button = new JButton("添加行"); 
    frame.add(button, BorderLayout.SOUTH);
    button.addActionListener(new ActionListener()
    {
    public void actionPerformed(ActionEvent event)
    {
    //修改vector会影响table中的数据
    vector.clear();
    vector.add("2");
    vector.add("李四");
    model.addRow(vector);
    model.fireTableDataChanged(); //更新table数据
    }
    });

    frame.pack();
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    }
    为了避免这种情况的发生,你添加过vector之后,需要再新建一个vector对象,就像这样
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.table.*;
    import java.util.*;public class TableTest 
    {
    public static void main(String[] args)
    {
    final DefaultTableModel model = new DefaultTableModel(new String[] {"编号", "姓名"}, 0);
    final Vector<String> vector = new Vector<String>();
    vector.add("1");
    vector.add("张三");
    model.addRow(vector);
    JTable table = new JTable(model);

    JFrame frame = new JFrame();
    frame.setLayout(new BorderLayout());
    frame.add(new JScrollPane(table), BorderLayout.CENTER);
    JButton button = new JButton("添加行"); 
    frame.add(button, BorderLayout.SOUTH);
    button.addActionListener(new ActionListener()
    {
    public void actionPerformed(ActionEvent event)
    {
    //新建一个vector就行了
    Vector<String> vector = new Vector<String>();
    vector.add("2");
    vector.add("李四");
    model.addRow(vector);
    model.fireTableDataChanged(); //更新table数据
    }
    });

    frame.pack();
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    }
      

  2.   

    以后多用ArrayList吧,少用vector