这是我写的一个显示ResultSet数据的TableModel:
public class ResultSetModel extends AbstractTableModel
{
private String[] colNames = new String[0];
private ArrayList data = new ArrayList();
private ArrayList listeners = new ArrayList(); public void setResultSet(ResultSet rs)
throws SQLException
{
data.clear(); ResultSetMetaData rmd = rs.getMetaData();
int colCount = rmd.getColumnCount();
colNames = new String[colCount];
for(int i=1; i<=colCount; i++)
colNames[i-1] = rmd.getColumnName(i);
while(rs.next())
{
String[] values = new String[colCount];
for(int col=1; col<=colCount; col++)
values[col-1] = rs.getString(col);
data.add(values);
}
fireTableStructureChanged();
}
public Class getColumnClass(int c)
{
return String.class;
} public int getColumnCount()
{
return colNames.length;
} public String getColumnName(int index)
{
return colNames[index];
} public int getRowCount()
{
return data.size();
} public Object getValueAt(int row, int col)
{
String[] values = (String[]) data.get(row);
return values[col];
} public boolean isCellEditable(int row, int col)
{
return false;
} public void clear()
{
data.clear();
colNames = new String[0];
fireTableStructureChanged();
}
}example:ResultSetModel model = new ResultSetModel();
JTable table = new JTable(model);
...
ResultSet rs = ...
model.setResultSet(rs);
...
public class ResultSetModel extends AbstractTableModel
{
private String[] colNames = new String[0];
private ArrayList data = new ArrayList();
private ArrayList listeners = new ArrayList(); public void setResultSet(ResultSet rs)
throws SQLException
{
data.clear(); ResultSetMetaData rmd = rs.getMetaData();
int colCount = rmd.getColumnCount();
colNames = new String[colCount];
for(int i=1; i<=colCount; i++)
colNames[i-1] = rmd.getColumnName(i);
while(rs.next())
{
String[] values = new String[colCount];
for(int col=1; col<=colCount; col++)
values[col-1] = rs.getString(col);
data.add(values);
}
fireTableStructureChanged();
}
public Class getColumnClass(int c)
{
return String.class;
} public int getColumnCount()
{
return colNames.length;
} public String getColumnName(int index)
{
return colNames[index];
} public int getRowCount()
{
return data.size();
} public Object getValueAt(int row, int col)
{
String[] values = (String[]) data.get(row);
return values[col];
} public boolean isCellEditable(int row, int col)
{
return false;
} public void clear()
{
data.clear();
colNames = new String[0];
fireTableStructureChanged();
}
}example:ResultSetModel model = new ResultSetModel();
JTable table = new JTable(model);
...
ResultSet rs = ...
model.setResultSet(rs);
...
用AbstractTableModel+JTalbe写的时候,JTable的构造函数不能同时加列名贺model