例如删除一行时我JTable需要刷新。
我的代码:
@Override
public void actionPerformed(ActionEvent e) {
 if (e.getSource() == dellButton) {
      int selectedRow = table.getSelectedRow();
        if (selectedRow >= 0) {
            try {
                int rowID = (int) table.getValueAt(table.getSelectedRow(), 0);
                int modelRowIndex = table.convertRowIndexToModel(selectedRow);
                rstm.removeRecord(rowID ,rowIndex);
            } catch (SQLException sqle) {
                sqle.printStackTrace();
            }
        } else {
            System.out.println("Select a row");
        }
    }
}
 ....
我的表模型类:
public class ResultSetTableModel extends AbstractTableModel {
private Connection connection;
private Statement statement;
private ResultSet resultSet;
private ResultSetMetaData metaData;
private int numberOfRows;
private boolean connectedToDatabase = false;
public ResultSetTableModel(String driver, String url,
        String username, String password, String query)
        throws SQLException, ClassNotFoundException {
    Class.forName(driver);
    connection = DriverManager.getConnection(url, username, password);
    statement = connection.createStatement(
            ResultSet.TYPE_SCROLL_INSENSITIVE,
            ResultSet.CONCUR_READ_ONLY);
    connectedToDatabase = true;
    updateFromDatabase(query);
}
@Override
public Class getColumnClass(int column) throws IllegalStateException {
    if (!connectedToDatabase) {
        throw new IllegalStateException("Not Connected to Database");
    }
    try {
        String className = metaData.getColumnClassName(column + 1);
        return Class.forName(className);
    } catch (Exception exception) {
        exception.printStackTrace();
    }
    return Object.class;
}
@Override
public int getColumnCount() throws IllegalStateException {
    if (!connectedToDatabase) {
        throw new IllegalStateException("Not Connected to Database");
    }
    try {
        return metaData.getColumnCount();
    } catch (SQLException sqlException) {
        sqlException.printStackTrace();
    }
    return 0;
}
@Override
public String getColumnName(int column) throws IllegalStateException {
    if (!connectedToDatabase) {
        throw new IllegalStateException("Not Connected to Database");
    }
    try {
        return metaData.getColumnName(column + 1);
    } catch (SQLException sqlException) {
        sqlException.printStackTrace();
    }
    return "";
}
@Override
public int getRowCount() throws IllegalStateException {
    if (!connectedToDatabase) {
        throw new IllegalStateException("Not Connected to Database");
    }
    return numberOfRows;
}
@Override
public Object getValueAt(int row, int column)
        throws IllegalStateException {
    if (!connectedToDatabase) {
        throw new IllegalStateException("Not Connected to Database");
    }
    try {
        resultSet.absolute(row + 1);
        return resultSet.getObject(column + 1);
    } catch (SQLException sqlException) {
        sqlException.printStackTrace();
    }
    return "";
}
public void updateFromDatabase(String query)
        throws SQLException, IllegalStateException {
    if (!connectedToDatabase) {
        throw new IllegalStateException("Not Connected to Database");
    }
    resultSet = statement.executeQuery(query);
    metaData = resultSet.getMetaData();
    resultSet.last();                   // move to last row
    numberOfRows = resultSet.getRow();  // get row number      
    fireTableStructureChanged();
}
public void disconnectFromDatabase() {
    if (!connectedToDatabase) {
        return;
    }
    try {
        statement.close();
        connection.close();
    } catch (SQLException sqlException) {
        sqlException.printStackTrace();
    } finally {
        connectedToDatabase = false;
    }
}
public void removeRecord(int userID , int userRow) throws SQLException {
    String deleteQuery = "delete from mytable where id=?";
    PreparedStatement pStatement = connection.prepareStatement(deleteQuery);
    pStatement.setInt(1, userID);
    int rowsAffected = pStatement.executeUpdate();
    System.out.println("Affected rows are: " + rowsAffected);
    fireTableRowsDeleted(userRow,userRow);
}
}
我fireTableRowsDeleted()在表模型中使用,但不起作用!