没太搞明白你的意思,参考一下试试
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
import java.util.*;
import java.awt.event.*;public class Frame3 extends JFrame {
  JScrollPane jScrollPane1 = new JScrollPane();
  JTable jTable1 = new JTable();
  DefaultTableModel dtm=null;
  Vector columnNames=new Vector();
  class RecordSet{
    String name;
    String age;
    String address;
    public RecordSet(String nm,String ag,String ad){
      name=nm;
      age=ag;
      address=ad;
    }
  }
  JButton jButton1 = new JButton();  public Frame3() {
    try {
      jbInit();
    }
    catch(Exception e) {
      e.printStackTrace();
    }
  }
  private void jbInit() throws Exception {
    jButton1.setText("jButton1");
    jButton1.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        jButton1_actionPerformed(e);
      }
    });
    this.getContentPane().add(jScrollPane1, BorderLayout.CENTER);
    this.getContentPane().add(jButton1,  BorderLayout.SOUTH);
    jScrollPane1.getViewport().add(jTable1, null);    columnNames.add("name");
    columnNames.add("age");
    columnNames.add("address");
    dtm=new DefaultTableModel(columnNames,30);    jTable1.setModel(dtm);
    setSize(500,400);
    pack();
    show();
  }  public void dataChanged(Vector dc){
    for(int i=0;i<dc.size();i++){
      RecordSet rs=(RecordSet)dc.get(i);
      dtm.setValueAt(rs.name,i,0);
      dtm.setValueAt(rs.age,i,1);
      dtm.setValueAt(rs.address,i,2);
    }
  }  public static void main(String args[]){
    Frame3 f=new Frame3();
  }  void jButton1_actionPerformed(ActionEvent e) {
    Vector dataContainer=new Vector();
    dataContainer.add(new RecordSet("mike","22","beijing"));
    dataContainer.add(new RecordSet("rose","20","guangdong"));
    dataContainer.add(new RecordSet("smith","25","tianjin"));
    dataChanged(dataContainer);
  }
}

解决方案 »

  1.   

    在数据到达时调用JTable.repaint()
      

  2.   

    我忘记加上了,应该采用fireTableXXXXXXX的方法通知JTable自动更新数据,我不太明白,但我不是要这种一行一行地setValueAt来更新数据。虽然我非常感谢您,但是你提供的方法对我方法的实现帮助不大。
    我参考别人的例子,原理是AbstractTableModel从vector中获得数据,由于一开始vector是空的,因此获得数据也是空的。JTABLE就显示空,等获得数据,在dataChanged方法里把获得的数据分解到Vector里,然后调用类似fireTableDataChanged的方法通知JTABLE自动从vector里获得所有数据并更新。dataChanged(obejct data)里的参数data就是收到的recordset[]。
    好了补充说明完了,希望高手帮忙。明天就是最后期限,我真的十分着急。谢谢谢谢!!!
      

  3.   

    你这样做也稍微麻烦了点。
    我以前做过一个,种种原因我不能给你整个代码,思路如下:
    自己写个tablemode继承AbstractTableModel
    除了实现那些方法外,自己写个更新数据的方法,
    public myModel extends AbstractTableModel{
    public Object data;
    public myModel(Object _data){data=_data;}
    比如public void updateData(Object _data){
      data=_data;
      this.fireTableChanged(null);
    }
    然后你要更新数据的时候,调用
    table.getModel().updataData(data);就行了。用的时候:
    myModel mym=new myModel(data);
    JTable t=new JTable(mym);
    希望对你有帮助。
      

  4.   

    如果有兴趣的话,可以参考jbuild带的dbswing的源代码,我想对你帮助会很大的的。
      

  5.   

    谢谢各位鼎力相助,经过若干次调试,才发现关于JTable显示的代码是没有错误的,错误出在数据库查询方法设计的问题上,不过还是非常感谢各位热心的高手帮忙。在此对给大家带来的麻烦深表歉意!!!!谢谢各位!!!