我更新了一個數據庫,我想刷新一個JTable
這個代碼綁定到一個按鈕單擊事件,但它不起作用。當我關閉應用程序並再次打開時JTable
顯示正確的數據。如何使JTable在更新數據庫後顯示刷新的數據?
我是否需要重寫抽象表上的某些方法?
try {
model=new MyTableModel(this.database);
table = new JTable(model);
} catch (SQLException e) {
e.printStackTrace();
}
scrollPane = new JScrollPane(table);
refresh.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
((MyTableModel)table.getModel()).fireTableDataChanged();
}
});
class MyTableModel extends AbstractTableModel {
private int i;
private String[] columnNames = { "ID", "Code", "Country", "Radio",
"primljeno", "select" };
private Object[][] data = { { new Integer(0), "", "", "", "",
new Boolean(false) } };
public MyTableModel(My_class_Database database)throws SQLException {
init(database);
}
public void init(My_class_Database database) throws SQLException
{
this.i = database.checkIsDataThere();
Object[][] object;
if (i == 0) {
object = new Object[i][7];
object = database.getDatafromDatabase(this.i);
this.data = object;
dataAp = object;
} else {
object = database.getDatafromDatabase(this.i);
textField.setText("No data in database");
}
}
public int getColumnCount() {
return columnNames.length;
}
public int getRowCount() {
return data.length;
}
public Object getValueAt(int row, int col) {
return data[row][col];
}
public String getColumnName(int col) {
return columnNames[col];
}
public void setValueAt(Object value, int row, int col) {
data[row][col] = value;
fireTableCellUpdated(row, col);
}
// problem sa null vrijednostima,null exception
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
public boolean isCellEditable(int row, int col) {
if (col > 4) {
return true;
} else
return (false);
}
}
一種方法是從數據庫中讀取所有數據並創建一個新的TableModel。然後你可以使用JTable.setModel()方法。 – camickr 2013-02-25 21:00:08
它的工作,謝謝你! – 2013-02-25 21:09:03
很難說沒有代碼。請回復[SSCCE](http://www.sscce.org)並告訴我們。 – 2013-02-25 22:03:54