我已经多次看过我的问题,但我从未见过我预期的答案。
我已经在JTable中输入了数据库的元素,我希望能够通过一些JButton删除/添加元素。
问题是当我添加/删除时,修改在数据库中可见,但在JTable中不可见。当我停止程序并再次运行它时,JTable会更新。
在修改行之后,我该怎么做才能立即更新表格?我试过this.table.repaint()
但它没有用。我想我必须对tablemodel做一些事情,可能是fireTableStructureChanged();
,但我不知道如何使用它
非常感谢你的时间。
这是我在JTable的控制器类中的代码的一部分,我认为它不会有帮助..
public void update(Observable o, Object message) {
Integer iMessage = (Integer) message;
if (iMessage == Cours.CHANGEMENT_ELEVES) {
int sizeEl = this.modele.getAllEleves().size();
if (this.modele.getAllEleves() !=null) {
Vector<String[]> data = this.modele.getAllEleves();
for (int i=0; i<sizeEl; i++) {
this.table.setValueAt(data.get(i)[0],i, 0);
this.table.setValueAt(data.get(i)[1],i,1);
this.table.setValueAt(data.get(i)[2],i,2);
}
this.table.repaint();
}
}
}
答案 0 :(得分:0)
如果要将JTable与DataBase同步,请添加以下代码。
// Here Add Your Data Fetch Code From DataBase
For e.g.
Vector<Object> objVect_Dt = util.GetQueryResultSet(query);
Vector<Vector<String>> data = (Vector<Vector<String>>) objVect_Dt.get(1);
Vector<String> header = (Vector<String>) objVect_Dt.get(0);
从DataBase更新表格模型后获取数据
DefaultTableModel dtm = new DefaultTableModel(data, header);
Table.setModel(dtm);
table.repaint();
答案 1 :(得分:0)
这不是Jtable重绘或重新验证的问题。 当你从表模型添加行或删除行时,你必须触发事件fireTableRowInserted even或tableDatachangeEvent。 以下代码是示例:
class myModel extends AbstractTableModel
{
////
////
////
////
////
// Remove Row from table Model
public void removeRow(int row) {
data.removeElementAt(row);
fireTableRowsDeleted(getRowCount(), getRowCount());
}
// Add new row to table
public void addRow(Vector row) {
data.addElement(row);
fireTableRowsInserted(0, getRowCount());
}
}