更新JTable

时间:2012-11-01 15:46:09

标签: jtable

我已经多次看过我的问题,但我从未见过我预期的答案。 我已经在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();
    }
    }
}

2 个答案:

答案 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());
        }
}