//大意如此
  private void refreshTable() {
    MyTableModel model = (MyTableModel) table.getModel();
    model.setRowData();
    scrollPane.repaint();
  }

解决方案 »

  1.   

    DefaultTableModel model = (DefaultTableModel) table.getModel();
    model.insertRow(int row, Vector rowData);//or model.insertRow(int row, Object[] rowData)
    table.setModel(model);
    table.updateUI();
      

  2.   

    model有insertRow(int row,Vector rowData)这个函数吗?
    updateUI()是何意思啊?
      

  3.   

    给你的TableModel添加监听器,addTableModelListener(),我做过保存到文件的,应该跟库没什么不同。
      

  4.   

    这样是可以做到
    但我的意思是说比例有增加、删除、修改等几个按钮,通过点击按钮对jtable进行操作,再保存到数据库中
    不知大家是如何实现的?
      

  5.   

    你的可以通过继承AbstractTableModel来实现你所需要的功能,
    1、关于更新Table,调用fireTableDataChanged()方法即可。
    2、想通过Table中数据的变化来更新数据库,覆盖setValueAt(int,int,Object)即可,在setValue()方法内部你可以添加对数据库的操作,来更新你的数据库
      

  6.   

    以下是我用过的代码,没有注释,好长时间了,所以我也记得不太清楚
    但是代码很简单,应该对你有帮助。//只实现对数据库进行更新,没有实现插入功能
    import javax.swing.table.*;
    import javax.swing.*;
    import java.sql.*;
    import java.util.*;
    import java.io.*;
    public class DBTableModel extends AbstractTableModel{    int row=0;
        int column=0;
        String[] columnNames = null;
        String[] columnTypes = null;    ArrayList valueList = new ArrayList();    //int resultSetType ;
        ResultSet rSet = null;
        Connection con = null;
        String tableName = null;
        boolean isReadOnly = true;    public DBTableModel(ResultSet rs){
            setResultSet(rs);
        }    public DBTableModel(Connection c,String table){
            try {
                setConnection(c,table);
            }
            catch (Exception ex) {
                ex.printStackTrace();
            }
        }    public int getRowCount(){
            return row;
        }    public int getColumnCount(){
            return column;
        }    public Object getValueAt(int r,int c){
            return ((Object[])valueList.get(r))[c];
        }    public String getColumnName(int c){
            return columnNames[c];
        }    public void setValueAt(Object v,int r,int c){
            if(r>row || c>column || r<0 || c<0){
                return;
            }
            if(((Object[])valueList.get(r))[c] != null
               && ((Object[])valueList.get(r))[c].equals(v)){
                return;
            }
            if (!isReadOnly) {
                try {
                    Statement stmt = con.createStatement();
                    Object[] o = this.getRow(r);
                    String columnName = columnNames[c];
                    String va = getSQL(v,columnTypes[c]);
                    String cd = " where ";
                    for(int i=0;i<o.length;i++){
                        if(i != c){
                            if (i+1 != o.length ) {
                                cd += columnNames[i]+"="+getSQL(o[i],columnTypes[i])+" And ";
                            }
                            else {
                                cd += columnNames[i]+"="+getSQL(o[i],columnTypes[i]);
                            }
                        }
                    }
                    if(c+1 == o.length){
                        cd = cd.substring(0,cd.lastIndexOf("And"));
                    }
                    String sql = "update "+tableName+" set "+columnName+"="+va+cd;
                    System.out.println(sql);
                    stmt.executeUpdate(sql);
                    stmt.close();
                    ((Object[])valueList.get(r))[c] = v;
                    //fireTableDataChanged();
                }
                catch (Exception ex) {
                    ex.printStackTrace();
                    JOptionPane.showMessageDialog(null,ex,"Error",JOptionPane.ERROR_MESSAGE);
                }
            }
        }    public boolean isCellEditable(int r,int c){
            return !isReadOnly;
        }    /**
         *
         * @return
         */
        public boolean addRow(){
            System.err.println("Not support yet");
            //fireTableStructureChanged();
            return false;
        }    /**
         *
         * @param name
         * @return
         */
        public boolean addColumn(String name){
            System.err.println("Not support yet");
            /*if(name.equals("") || name == null){
                name = "NULL";
            }
            fireTableStructureChanged();*/
            return false;
        }    /**
         *
         * @param b
         */
        public void setReadOnly(boolean b){
            isReadOnly = b;
            fireTableStructureChanged();
        }
        void setResultSet(ResultSet rs){
            try{
                //resultSetType = rs.getType();
                rSet = rs;
                initColumnNameAndType(rs);
                initDatas(rs);
                fireTableStructureChanged();
                fireTableDataChanged();
            }
            catch(SQLException e){
                e.printStackTrace();
            }
        }    void setConnection(Connection c,String table)throws Exception{
            if(c == null){
                return;
            }
            isReadOnly = false;
            con = c;
            tableName = table;
            Statement stmt = c.createStatement();
            setResultSet(stmt.executeQuery("select * from "+table));
            stmt.close();
        }    private void initColumnNameAndType(ResultSet rs) throws SQLException{
            ResultSetMetaData dbmd = rs.getMetaData();
            column = dbmd.getColumnCount();
            columnNames = new String[column];
            columnTypes = new String[column];
            for(int i=0;i<column;i++){
                columnNames[i] = dbmd.getColumnName(i+1);
                columnTypes[i] = dbmd.getColumnTypeName(i+1);
            }
        }    private void initDatas(ResultSet rs) throws SQLException{
            this.rSet = rs;
            int index = 0;
            valueList.clear();
            while(rs.next()){
                Object[] rowValues = new Object[column];
                for(int i=0;i<column;i++){
                    try{
                        rowValues[i] = rs.getObject(i+1);
                    }catch(ArrayIndexOutOfBoundsException ee){
                        ee.printStackTrace();
                    }
                }
                valueList.add(index,rowValues);
                index++;
            }
            row = valueList.size();
        }    private Object[] getRow(int r){
            if (r<0 || r>row) {
                return null;
            }
            else{
                return (Object[])valueList.get(r);
            }
        }    private String getSQL(Object o,String type){
            String v = "";
            System.out.println(type);
            if(type.equalsIgnoreCase("INT") || type.equalsIgnoreCase("integer")){
                v += o;
            }
            else if(type.equalsIgnoreCase("smallint")){
                v += o;
            }
            else if(type.equalsIgnoreCase("Long")){
                v += o;
            }
            else if(type.equalsIgnoreCase("Double")){
                v += o;
            }
            else if(type.equalsIgnoreCase("Float")){
                v += o;
            }
            else if(type.equalsIgnoreCase("Byte")){
                v += o;
            }
            else if(type.equalsIgnoreCase("Short")){
                v += o;
            }
            else if(type.equalsIgnoreCase("Bigint")){
                v += o;
            }
            else if(type.equalsIgnoreCase("Counter")){
                v += o;
            }
            else if(type.equalsIgnoreCase("blob") || type.equalsIgnoreCase("clob")){
                v = "'"+o+"'";
            }
            else {
                v = "'"+o+"'";
            }
            return v;
        }
    }