例如删除一行时我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()
在表模型中使用,但不起作用!