参考
Read a data file into a JTable
The first line of the data file contains the column names. Fields are separated by the "|" character. [customers.dat]
Id|Name|City|Phone
102|Beth Reiser|New York|(212)5558725
111|Dylan Ricci|Syracuse|(315)5554486
116|Brian Gugliuzza|Mamaroneck|(914)5553817
120|Gertrude Stein|Elmsford|(914)5553476
131|Daljit Sinnot|Bohemia|(516)5559811 
First we need a TableModel to define the data structure to used by the JTable. [DataFileTableModel.java]
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.event.*;
import java.io.*;
import java.util.*;public class DataFileTableModel extends AbstractTableModel {
  protected Vector data;
  protected Vector columnNames ;  
  protected String datafile;
  
  public DataFileTableModel(String f){
    datafile = f;
    initVectors();  
    }  public void initVectors() {
    String aLine ;
    data = new Vector();
    columnNames = new Vector();
    try {
      FileInputStream fin =  new FileInputStream(datafile);
      BufferedReader br = new BufferedReader(new InputStreamReader(fin));
      // extract column names
      StringTokenizer st1 = 
         new StringTokenizer(br.readLine(), "|");
        while(st1.hasMoreTokens())
          columnNames.addElement(st1.nextToken());
      // extract data
      while ((aLine = br.readLine()) != null) {  
        StringTokenizer st2 = 
         new StringTokenizer(aLine, "|");
        while(st2.hasMoreTokens())
          data.addElement(st2.nextToken());
        }
      br.close();  
      }
    catch (Exception e) {
      e.printStackTrace();
      }
  }  public int getRowCount() {
    return data.size() / getColumnCount();
    }  public int getColumnCount(){
    return columnNames.size();
    }  public String getColumnName(int columnIndex) {
    String colName = "";    if (columnIndex <= getColumnCount())
       colName = (String)columnNames.elementAt(columnIndex);    return colName;
    }
    
  public Class getColumnClass(int columnIndex){
    return String.class;
    }
    
  public boolean isCellEditable(int rowIndex, int columnIndex) {
    return false;
    }
    
  public Object getValueAt(int rowIndex, int columnIndex) {
    return (String)data"404.php3" tppabs="http://www.rgagnon.com/javadetails/.elementAt(" (rowIndex * getColumnCount()) + columnIndex);
    }
    
  public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
    return;
    }
}
 
[DataFileTable.java]
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.io.*;
import java.util.*;public class DataFileTable extends JPanel {
  public DataFileTable(String dataFilePath) {
    JTable table;
    DataFileTableModel model;
    Font f;    f = new Font("SanSerif",Font.PLAIN,24);
    setFont(f);
    setLayout(new BorderLayout());    model = new DataFileTableModel(dataFilePath);    table = new JTable();
    table.setModel(model);
    table.createDefaultColumnsFromModel();    JScrollPane scrollpane = new JScrollPane(table);
    add(scrollpane);
    } public Dimension getPreferredSize(){
    return new Dimension(400, 300);
    }
    
 public static void main(String s[]) {
    JFrame frame = new JFrame("Data File Table");
    DataFileTable panel;
        
    panel = new DataFileTable("customers.dat");    frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
    frame.setForeground(Color.black);
    frame.setBackground(Color.lightGray);
    frame.getContentPane().add(panel,"Center");
        
    frame.setSize(panel.getPreferredSize());
    frame.setVisible(true);
    frame.addWindowListener(new WindowCloser());
    }
 }class WindowCloser extends WindowAdapter {
 public void windowClosing(WindowEvent e) {
   Window win = e.getWindow();
   win.setVisible(false);
   System.exit(0);
    }
}
 

解决方案 »

  1.   

    用JTable.setModel()方法就可以实现表数据的刷新和重新显示,方法中的参数最好用DefaultTableModel或他的扩展,,用你从数据库中得到的记录集来构造JTable模型
      

  2.   

    请问skyyoung(路人甲),对于记录集在表格中显示,您通常都是用这样的方法吗? 
      

  3.   

    你没有仔细看路人甲给你的代码呀,你看下面几句摘自他帖的代码:
    model = new DataFileTableModel(dataFilePath);    table = new JTable();
        table.setModel(model);
        table.createDefaultColumnsFromModel();
    他说的这个例子是读一个文件的内容,以标记划分来作为不同的CELL的数据,看懂了可以解决你提出的问题的:)
      

  4.   

    return (String)data"404.php3" tppabs="http://www.rgagnon.com/javadetails/.elementAt(" (rowIndex * getColumnCount()) + columnIndex);
    是什么意思呢?
        
      

  5.   

    他COPY错了,应该是
    public Object getValueAt(int rowIndex, int columnIndex) {
         return (String)data.elementAt((rowIndex * getColumnCount()) + columnIndex);
        }
      

  6.   

    看过路人甲的代码后改为如下,可为什么还提示无效的列索引,错误为:
    SQLException: 无效的列索引: getValidColumnIndex
    SQLState: null
    Message: 无效的列索引: getValidColumnIndex
    Vendor: 17003修改后的代码如下
    ******************************************
    [commontablemodel1.java]
    package gistar.classes;import javax.swing.*;
    import javax.swing.table.*;
    import javax.swing.event.*;
    import java.util.*;
    import java.lang.*;
    import java.math.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.sql.*;
    import javax.swing.JFrame;public class commontablemodel1 extends AbstractTableModel {
      protected Vector data;
      protected Vector columnnames ;  
      protected ResultSet rs;
      
      public commontablemodel1(ResultSet inputrs){
        rs=inputrs;
        initVectors();  
        }  public void initVectors() {
        data = new Vector();
        columnnames = new Vector();
        int i;
        try {
          ResultSetMetaData rsmd = rs.getMetaData();
          for (i=0;i<rsmd.getColumnCount();i++)
          System.out.println(rsmd.getColumnName(i));
          columnnames.addElement(rsmd.getColumnName(i));
          while(rs.next())
            {
             for (i=0;i<rsmd.getColumnCount();i++)
               data.addElement(rs.getObject(i));                
            }       
        }
        catch(SQLException ex) {
              System.err.println("SQLException: " + ex.getMessage());
              System.err.println("SQLState: " + ex.getSQLState());
              System.err.println("Message: " + ex.getMessage());
              System.err.println("Vendor: " + ex.getErrorCode());
            }  
     }  public int getRowCount() {
        if (getColumnCount()>0) 
          return data.size() / getColumnCount();
        else
          return 0;
        }  public int getColumnCount(){
        return columnnames.size();
        }  public String getColumnName(int columnIndex) {
        String colName = "";    if (columnIndex <= getColumnCount())
          colName = (String)columnnames.elementAt(columnIndex);    return colName;
        }
        
      public Class getColumnClass(int columnIndex){
        return String.class;
        }
        
      public boolean isCellEditable(int rowIndex, int columnIndex) {
        return false;
        }
        
      public Object getValueAt(int rowIndex, int columnIndex) {
        return (String)data.elementAt(rowIndex * getColumnCount() + columnIndex);
        }
        
      public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        return;
        }
    }**************************************************************************
    [frmMdi.java]
    package gistar.classes;import java.lang.*;
    import java.util.*;
    import java.sql.*;
    import java.math.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import oracle.jdbc.driver.*;import javax.swing.JTable;
    import javax.swing.table.AbstractTableModel;
    import javax.swing.JScrollPane;
    import javax.swing.JFrame;
    import javax.swing.SwingUtilities;
    import javax.swing.JOptionPane;public class frmMdi extends JFrame implements ActionListener {
         JTable Btable;
         JScrollPane scrollpane1;
        
         public frmMdi(){
         super("&Iuml;&szlig;&Acirc;·×&Ecirc;&Ocirc;&acute;&sup1;&Uuml;&Agrave;í&Iuml;&micro;&Iacute;&sup3;");
         addWindowListener(new Wadapt());
         setSize(600,500);
         getContentPane().setLayout(new FlowLayout());
         jinit();
         //setVisible(true);
        }  
        
        private void jinit(){
        
            JMenuBar mb=new JMenuBar();
         setJMenuBar(mb);        JMenu filemenu=new JMenu("File");
        mb.add(filemenu);
        JMenuItem miLoginOut=new JMenuItem("Login");
        miLoginOut.addActionListener(this);
        filemenu.add(miLoginOut);
        JMenuItem miExit=new JMenuItem("Exit");
        miExit.addActionListener(this);
        filemenu.add(miExit);
        JMenuItem miFixSearch=new JMenuItem("search");
        miFixSearch.addActionListener(this);
        filemenu.add(miFixSearch);    
         
            //Create the scroll pane and add the table to it. 
            Btable=new JTable();
            Btable.createDefaultColumnsFromModel();
            Btable.setPreferredScrollableViewportSize(new Dimension(500, 400));
         scrollpane1 = new JScrollPane(Btable);        //Add the scroll pane to this window.
            getContentPane().add(scrollpane1, BorderLayout.CENTER);
        } 
            
        public void actionPerformed(ActionEvent evt){
         if (((JMenuItem)(evt.getSource())).getText()=="search"){ 
             search();
         }
         if (((JMenuItem)evt.getSource()).getText()=="&Iacute;&Euml;&sup3;&ouml;"){ 
             System.exit(0);
         }
        
    }  
    private void search(){
             
            try {
            DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
    Connection conn = DriverManager.getConnection("java:oracle:thin:@192.168.200.103:1521:orical","hz","hz");  
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT * FROM BUILDING" );
            
            commontablemodel1 model=new commontablemodel1(rs);        
            Btable.setModel(model);
            //table.createDefaultColumnsFromModel();          
            
            //commontablemodel Btablemodel = new commontablemodel(rs,this);
            
         scrollpane1.setViewportView(Btable);
            rs.close();
            stmt.close();
            conn.close();
          }
            catch(SQLException ex) {
              System.err.println("SQLException: " + ex.getMessage());
              System.err.println("SQLState: " + ex.getSQLState());
              System.err.println("Message: " + ex.getMessage());
              System.err.println("Vendor: " + ex.getErrorCode());
            }    
        }
       
    }
      
    class Wadapt extends WindowAdapter{
        public void windowClosing(WindowEvent evt){
         Frame frm=(Frame)evt.getSource();
         frm.setVisible(false);
         frm.dispose();
         System.exit(0);
        }