3

私の質問が何度か出されたのを見てきましたが、期待した答えを見たことがありません。データベースの要素を JTable に入力しましたが、いくつかの JButton を介して要素を削除/追加できるようにしたいと考えています。問題は、追加/削除すると、変更がデータベースには表示されますが、JTable には表示されないことです。プログラムを停止して再度実行すると、JTable が更新されます。行を変更した直後にテーブルを更新するにはどうすればよいですか? 私はやろうとしましthis.table.repaint()たが、うまくいきませんでした。おそらくテーブルモデルで何かをしなければならないと思いますが、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の再描画または再検証の問題ではありません。テーブル モデルから行を追加または削除する場合、イベント 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 に答える
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 に答える