public class ResultSetModel extends AbstractTableModel
{
private String[] colNames = new String[0];
private ArrayList data = new ArrayList();
private ArrayList listeners = new ArrayList(); public void parseResultSet(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();
}
}  ResultSet rs = ... //query data from database  ResultSetModel model = new ResultSetModel();
  model.parseResultSet(rs);
  JTable table = new JTable(model);
  ...
  ResultSet rs1 = ... //another query
  model.parseResultSet(rs1);

解决方案 »

  1.   

    package suncertify.ui;
    import suncertify.db.Data;
    import suncertify.ui.Common;public class MyTableModel extends javax.swing.table.AbstractTableModel
    implements java.awt.event.ActionListener
    {
        private Data DB=Data.getInstance();
        private static MyTableModel myTableModel;
        private int rowCnt;
        private int columnCnt;
        private int currentPageNO;
        private int totalPage;
        private String[] fieldNames;
        private Object[][] content;
        private int[] recNoArray;
        private String[] filter;
        private GenericSelectionPanel filterPanel;
        private MyTableView tableView;
        private MyTableModel()
        {
            init();
            refreshData();
        }
        public static MyTableModel getInstance()
        {
            if (myTableModel==null)
            {
                myTableModel = new MyTableModel();
            }
            return myTableModel;
        }
        private void init()
        {
            rowCnt=Common.MODEL_ROW_COUNT;
            columnCnt=DB.getColumnCount();
            fieldNames=DB.getColumnNames();
            currentPageNO=1;
            filter = new String[columnCnt];
            recNoArray=new int[Common.MODEL_ROW_COUNT];
        }
        public void refreshData()
        {
            content=getData((currentPageNO-1)*rowCnt,rowCnt);
            this.fireTableDataChanged();
        }
        public void setColumnCount(int columnCount)
        {
            this.columnCnt = columnCount;
        }
        public void setColumnName(String names[])
        {
            fieldNames = names;
        }
        private void setTotalPageCount(int totalPage)
        {
            this.totalPage=totalPage;
        }
        public int getTotalPageCount()
        {
            return totalPage;
        }    private Object[][] getData(int startPos,int length)
        {
            Object[][] data=new Object[length][columnCnt];
            try
            {
                int[] keyArray = DB.find(filter);
                int total=keyArray.length/rowCnt+1;
                if (keyArray.length%rowCnt==0)
                    total--;
                setTotalPageCount(total);
                if (startPos>=keyArray.length)
                {
                    return data;
                }
                if (length>keyArray.length-startPos)
                    length=keyArray.length-startPos;
                for(int i=0;i<length;i++)
                {
                    recNoArray[i]=keyArray[startPos+i];
                    data[i] = DB.read(recNoArray[i]);
                }
            }catch(Exception ex)
            {
                ex.printStackTrace();
            }
            return data;
        }
        public int getRowCount()
        {
            return rowCnt;
        }
        public int getColumnCount()
        {
            return columnCnt;
        }
        public String getColumnName(int column)
        {
            return fieldNames[column];
        }
        public Object getValueAt(int row,int column)
        {
            return content[row][column];
        }
        public boolean isCellEditable(int row,int column)
        {
            return false;
        }
        public void setValueAt(Object value,int row,int column)
        {
            content[row][column] = value;
            this.fireTableCellUpdated(row,column);
            System.out.println(value+" has been modified!");
            String[] record = new String[columnCnt];
            for(int i=0;i<columnCnt;i++)
            {
                record[i] = (String) content[row][i];
            }
            try
            {
                DB.update(recNoArray[row], record);
            }
            catch(suncertify.db.exception.RecordNotFoundException e)
            {
                tableView.showWarningInfo("Update failer! the record you are editing has not been found!" );
            }
            //send data to server,and unLock it.
        }
        public int getCurrrentPageNO()
        {
            return currentPageNO;
        }
        public void setFilter(String[] filter)
        {
            this.filter = filter;
        }
        public void setFilterSelection(GenericSelectionPanel selection)
        {
            filterPanel = selection;
        }
        private void setFilterFieldContent(String[] filter,String[][] filterFieldContent)
        {
            for(int i=0;i<filterFieldContent.length;i++)
                for(int j=0;j<columnCnt;j++)
                {
                    if ( fieldNames[j].equalsIgnoreCase(filterFieldContent[i][0]) )
                    {
                        filter[j] = filterFieldContent[i][1];
                        break;
                    }
                }
        }
        private String[] getProperFilter()
        {
            String[] filter = new String[columnCnt];
            if (filterPanel instanceof AndNLSelectionPanel)
            {
                AndNLSelectionPanel panel = (AndNLSelectionPanel) filterPanel;
                setFilterFieldContent(filter,panel.getFilterField());
            }
            else if (filterPanel instanceof OrNLSelectionPanel)
            {
                OrNLSelectionPanel panel = (OrNLSelectionPanel) filterPanel;
                setFilterFieldContent(filter,panel.getFilterField());
            }
            return filter;
        }
        public void setTableView(MyTableView view)
        {
            tableView = view;
        }
        private int getSelectedRow()
        {
            return tableView.getSelectedRow();
        }
        public void actionPerformed(java.awt.event.ActionEvent e)
        {
            String command = e.getActionCommand();
            System.out.println(command);
            if (command.equals(Common.FIRST_PAGE))
            {
                currentPageNO=1;
            }
            else if (command.equals(Common.PRED_PAGE)&&(currentPageNO>1))
            {
                currentPageNO--;
            }
            else if (command.equals(Common.NEXT_PAGE)&&(currentPageNO<totalPage))
            {
                currentPageNO++;
            }
            else if (command.equals(Common.LAST_PAGE))
            {
                currentPageNO=totalPage;
            }
            else if (command.equals(Common.SEARCH))
            {
                filter = getProperFilter();
            }
            else if (command.equals(Common.OPERATION.BOOK_AND_UPDATE))
            {
                System.out.println("Selected row:"+getSelectedRow());
            }
            refreshData();
        }
    }
      

  2.   

    上面的代码是我做SCJD时,用到的数据模型,可以动态更新到JTable,
    你可以去掉不相关代码,做个参考。
      

  3.   

    用 AbstractTableModel,需要导入那个包啊?
      

  4.   

    void button1_actionPerformed(ActionEvent e) {
      String block=jComboBox1.getSelectedItem().toString().trim();
      opendb r=new opendb();
      String sqlblock="select * from block where blockname='"+block+"'";
      try{
        ResultSet rs=r.dbstatement.executeQuery(sqlblock);
        ResultSetModel model = new ResultSetModel();
        model.parseResultSet(rs);
        JTable table = new JTable(model);
        
        rs.close();
        }catch(Exception e1){}
      }怎么不显示table啊?
      

  5.   

    ...
    ResultSetModel model = new ResultSetModel();
    model.parseResultSet(rs);
    JTable table = new JTable(model);
    JDialog dlg = new JDialog(this, "result", true);
    dlg.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
    dlg.setSize(640, 480);
    dlg.getContentPane().add(table);
    dlg.setVisible(true);