更新JTable

3
我看到有几次提出了我的问题,但我从未看到我期望的答案。 我已经在JTable中输入了数据库的元素,并希望能够通过一些JButtons添加/删除元素。 问题是,当我添加/删除时,修改在数据库中可见,但在JTable中不可见。当我停止程序并再次运行它时,JTable会更新。 我该怎么做才能在行修改后立即更新表格? 我尝试过this.table.repaint(),但没有用。 我想我将不得不使用tablemodel做一些事情,可能是fireTableStructureChanged();,但我不太了解如何使用它。 非常感谢您的时间。
这是我的控制器类中代码的一部分,我认为它不会有所帮助...
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
请在需要将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();

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接