我已經創建了一個Java swing應用程序,允許用戶操縱一些Oracle表。ArrayList更新插入一行,但Jtable仍然不刷新
我實現了JTable中以這樣的方式
public class TableModel extends AbstractTableModel{
.
.
.
public List <List <String> > result = null;
.
.
.
public void createTable(ResultSet r) throws SQLException {
rs = r;
numcols = getColumnCount();
result = new ArrayList();
while (rs.next()) {
List <String> row = new ArrayList<>(numcols);
for (int i=1; i<= numcols; i++)
row.add(rs.getString(i).replace("00:00:00.0", "")); //just managing stuffs .. nothing important. Don't care of this replace.
result.add(row);
}
fireTableStructureChanged();
}
public void addRow(){
List <String> row = new ArrayList<>();
for(int i=1;i<=getColumnCount();i++)
row.add("");
result.add(row);
fireTableStructureChanged();
}
public Object getValueAt(int row, int col) {
return result.get(row).get(col);
}
public int getColumnCount() {
if (rs == null) {
return 0;
}
try {
return rs.getMetaData().getColumnCount();
} catch (SQLException e) {
System.err.println("error in colcount");
return 0;
}
}
public int getRowCount() {
int totalRows = 0;
try {
rs.last();
totalRows = rs.getRow();
rs.beforeFirst();
} catch(Exception ex) {
return 0;
}
return totalRows ;
}
}
所以,我的數據庫數據存儲到數組列表,然後我打印使用ArrayList中的表。 現在在addRow()函數中,我向該數組列表中添加一個空記錄(在我看來,一個空記錄是由所有空(「」)字符串組成的記錄)。 最後使用fireTableStructureChanged()方法我期望表刷新自己..但這永遠不會發生,我不明白爲什麼。
我已經檢查到新行已成功加載到數組列表中: 我將存儲在數據庫表中的所有數據存入數組列表中,並且新列已成功加載到數組列表中。 所以我發誓這個問題是關於那個fireTableStructureChanged()方法的。
感謝:3
也許你還需要調用'fireTableDataChanged'? – tsolakp
嘗試fireTableDataChanged和fireTableStructureChanged。將空記錄添加到ArrayList時沒有任何反應。 – Ricks23
在問題中包含'getRowCount'和'getColumnCount'方法實現會很有幫助。 – tsolakp