我已经更新了一个数据库,我想刷新JTable
这个代码与按钮点击事件相关联,但它不起作用。当我关闭aplication并再次打开它时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);
}
}
答案 0 :(得分:1)
因为它是(发布的代码),模型不知道数据库中的修改。您可以刷新模型中的数据,例如调用现有的init()
方法或创建类似的方法。作为替代方案,您可以构建一个新模型并将其重置在表中。
模型负责触发您在fireTableDataChanged
中使用的actionPerformed
等通知。表客户端不应该执行这些方法。例如,fireTableDataChanged
属于init()
方法。有关详细信息和示例,请参阅Firing Data Change Events。
模型应该与数据有关,因此最好将设置textField
的逻辑移出模型。如果需要,您可以从模型中公开其他方法,以帮助客户获得有关数据和状态的其他详细信息。
答案 1 :(得分:1)
此link包含类似的讨论,可能正是您正在寻找的内容。用户“nkvnkv”的答案有一个有趣的概念。
干杯。
答案 2 :(得分:0)
尝试过很多事情,但最后这对我有用:
if (model.getRowCount() > 0) {
for (int i = model.getRowCount() - 1; i > -1; i--) {
model.removeRow(i);
}
}
setTablevalue();
我从JTable中删除了所有行,并再次调用setTableValue方法来重新填充表。