2011-08-08 11 views
1

私はJtableをリフレッシュしようとしていましたが、tableModelとTable Modelリスナーのコンセプトと混乱していると思います。TableModelを使用したJTableのリフレッシュ

は、だから私は、だから私の収集[]オブジェクトへの更新後がある

public class TasksTableModel extends AbstractTableModel { 
    int[] collect;  
    String[] columnNames;  
    Object[][] data;  

    public TasksTableModel(int[] collect) { 
     this.collect=collect; 
     columnNames=new String[]{"Job","Task"}; 
     for(int i=0;i<10;i++) { 
      data[i][0]=collect[0]; 
      data[i][1]=collect[1]; 
     } 
    } 
}  

    public int getRowCount() { 
     return data.length; 
    } 

    public int getColumnCount() { 
     return columnNames.length; 
    } 

    public Object getValueAt(int rowIndex, int columnIndex) { 
     return data[rowIndex][columnIndex]; 
    } 

    public String getColumnName(int col) { 
     return columnNames[col]; 
    } 
} 

私の表は、この TasksTableModel model = new TasksTableModel(tc); tcTable = new JTable(model);

のような別のクラスで作成されたのTableModelクラスのデータ構造を渡すことにより、テーブルを構築します私はテーブルをリフレッシュする必要があります。これまで、私は新しいTaskTableModelにテーブルを設定して、既存のテーブルのソートを失う場所を更新しました。私の理解を深めるためのサンプルコードを提供してください。

+1

[sscce]を提供してください(http://sscce.org/);ここには[例](http://stackoverflow.com/questions/5100822/jtable-adding-new-row/5101107#5101107)があります。 – trashgod

答えて

1

リファクタリングTasksTableModelは、例えば、コンストラクタからモデルを設定分離する:あなたはcollect[]オブジェクトを更新するときに、次に

public TasksTableModel(int[] collect) { 
    columnNames=new String[]{"Job","Task"}; 
    setModel(collect); 
} 

public void setModel(int[] collect) { 
    this.collect=collect; 
    for(int i=0;i<10;i++) { 
     data[i][0]=collect[0]; 
     data[i][1]=collect[1]; 
    } 
} 

の操作を行います。

model.setModel(collect); 
model.fireTableDataChanged(); 
+0

noooo ...モデルに代わってイベントを発生させないでください。これは、モデル_itself_の固有の責任です(setModel(...)の最後にあります) – kleopatra

関連する問題