がコンストラクタのJTableに与えられます。次にupdateTable
でTableClass
のrowData
フィールドを更新するだけです。したがって、JTable
もTableModel
もあなたの変更について何も知りません。テーブルのモデルをupdateTable
に更新する必要があります。
つまり、rowData
をupdateTable
に更新すると、コンストラクタのJTableに渡された同じrowData
オブジェクトは更新されません。
以下のクラスは、機能的にはクラスと同じです。これは、あなたがやっていることが効果がない理由をより明確にしていますか?ご覧のとおり、rowDataはTableClassとJTableで共有されることはありません。 TableModelを更新する必要があります。独自のTableModelを実装し、そのオブジェクトを変更内容で更新することができます。
class tableClass
{
public Vector columnNames = null;
private JTable jTable;
DefaultTableModel model;
public tableClass(JPanel jPanel, Vector rowDataInput, Vector columnNamesInput)
{
Vector rowData = rowDataInput;
columnNames = columnNamesInput;
jTable = new JTable(rowData, columnNames);
jTable.setFillsViewportHeight(true);
JScrollPane jScrollPane = new JScrollPane(jTable);
jScrollPane.setPreferredSize(new Dimension(300, 100));
jPanel.add(jScrollPane,BorderLayout.CENTER);
}
public void updateTable(Vector rowDataInput)
{
Vector rowData = rowDataInput;
model =(DefaultTableModel)jTable.getModel();
model.fireTableDataChanged();
}
}
変更が有効であることを証明するために、コードを次のように変更することができます。 注:私はではないこのアプローチを提唱 - 実際には独自のTableModelを実装する必要がありますが、単純に基になるモデル自体を変更する方法を示して、変更がJTableの画面上で起こるのを見てください。
EDITこの答えが受け入れられたとして、私はupdateTable
に全データのベクトルまたはベクトルを更新する方法を示すために、以下のコードを更新しました@kleopatraからのコメントを以下とアダムの回答(1)@使用。私はまだ生産コードでこれをやっていないだろうが、少なくともこれは機能的に正しいものでOPの質問に近い。
class MyTable {
private Vector columnNames = null;
private JTable jTable;
public tableClass(JPanel jPanel, Vector rowDataInput, Vector columnNamesInput) {
// ...
jTable = new JTable(rowData, columnNames);
// ...
}
public void updateTable(Vector rowDataInput) {
model =(DefaultTableModel)jTable.getModel();
// Now actually update the model with your new data:
model.setDataVector(rowDataInput, columnNames);
}
}
私が言ったように、これはそれを行うには良い方法ではありませんが、私はちょうどあなたがやっていることは働いていない理由をお見せしようとしています。あなたが書いた:)
あなたは 'updateTable'で何も変更していませんが、何も変更しないとどうなりますか? – stryba
'rowData'には新しいコンテンツデータが含まれていますが、そのmodel.fireTableDataChanged();それをリフレッシュするはずですか? –
'rowData'を' rowDataInput'に、 'JTable'はこれを知らず、古い' rowData'を指しています。私はここでポインタと混同していると信じています。一番下の行は、データが変更されたことをテーブルモデルに伝え、 'fireTableDataChanged'を呼び出すだけで、' JTable'などの添付ビューを通知します。 – stryba