写个TableModel是可以,问题是如何使用这个TableModel来刷新JTable中的数据?该使用JTable的什么方法呢?

解决方案 »

  1.   

    用JTable的setModel方法
    在数据集改变后给JTable一个新的Model
    在Java 2核心技术 卷2上有一个跟你的要求一样的例子
    用一个JTable显示数据库中所有的表的数据
      

  2.   

    OK了,Thanks,如下:import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.sql.SQLException;
    import javax.swing.table.AbstractTableModel;public class DynamicTableModel extends AbstractTableModel
    {
    //private ResultSet  rs=null;
    private String[]  sColumnNames=null;
    private Object[][] oData=null;
    private int iColumnCount=0;
    private int iRowCount=0;


    public DynamicTableModel(String[] sColumn,Object[][] oValue)
    {
    sColumnNames = sColumn;
    oData = oValue;
    iColumnCount = sColumn.length;
    iRowCount=oValue.length;
    }

    public DynamicTableModel(ResultSet rs) throws SQLException
    {
    if (rs==null) throw new IllegalArgumentException();
    ResultSetMetaData rsmd = rs.getMetaData();

    iColumnCount = rsmd.getColumnCount();

    sColumnNames = new String[iColumnCount];
    oData = new Object[100][iColumnCount];

    for (int i=1;i<=iColumnCount;i++)
    {
    sColumnNames[i-1] = rsmd.getColumnName(i)+" | "+rsmd.getColumnTypeName(i);
    }

    rs.beforeFirst();//因为不能保证未可滚动结果集,其他地方也要执行next()循环,所以这个无效,这个构造器也没有真正作用
    while(rs.next())
    {
    String sData = null;

    for (int i=1;i<iColumnCount;i++)
    {
    sData = rs.getString(i);
    if (rs.wasNull()) sData="NULL";
    oData[iRowCount][i-1] = sData;
    }
    iRowCount++;
    }
    System.out.println("iRowCount="+iRowCount);
    }

    public Class getColumnClass(int columnIndex) 
    {
    if (columnIndex>=iColumnCount) return null;
    return oData[0][columnIndex].getClass();
        }

    public String getColumnName(int columnIndex) 
    {
    if (columnIndex>=iColumnCount) return "";
    return sColumnNames[columnIndex];
        }
        
        public int getColumnCount()
        {
         return iColumnCount;
        }
        
        public int getRowCount()
        {
         return iRowCount;
        }
        
        public Object getValueAt(int row,int col)
        {
         return oData[row][col];
         }
    }另外一个问题:
    JTable中横向调整Size时,设置什么属性可以让横向各列宽度不变,而是自动出现水平滚动条?
      

  3.   

    jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
      

  4.   

    搞定:table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);