3

我已经看到我的问题被问了好几次,但我从来没有看到我期望的答案。我已经在 J​​Table 中输入了数据库的元素,我希望能够通过一些 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();
    }
    }
}
4

2 回答 2

0

当您想要将 JTable 与数据库同步时,请添加以下代码。

        // 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);

从数据库获取数据后更新表模型为

        DefaultTableModel dtm = new DefaultTableModel(data, header);
        Table.setModel(dtm);
         table.repaint();
于 2012-11-03T04:18:01.613 回答
0

它不是 Jtable 重绘或重新验证的问题。当您从表模型中添加行或删除行时,您必须触发事件 fireTableRowInserted 或 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());
        }
}
于 2013-10-18T11:11:07.773 回答