2010-11-20 8 views
1

私は、このクラスがあります。AbstractTableModelで複雑なクラスを表現する方法は?

public abstract class Directory { 

    protected int id; 
    protected File path; 
    protected LinkedList<Filter> filters; 
    protected LinkedList<File> files; 
    protected int wildcard; 
    public static int numCols = 3; 

    /* other things */ 
} 

をそして私は、このテーブルモデルに書いた:あなたは私は単純な文字列として表示すぎたいLinkedList<Filter>を持って見ることができるように

public class DirectoryListTableModel extends AbstractTableModel { 

    private static final long serialVersionUID = 1L; 
    private LinkedList<Directory> datalist; 
    private String[] columnNames= {"ID", "Directory", "Wildcard", "Filters"}; 


    public DirectoryListTableModel(){ 
    } 

    public void setDatalist(LinkedList<Directory> temp){ 
     this.datalist = temp; 
    } 

    public void showElement(){ 
     fireTableRowsInserted(this.datalist.size()-2,this.datalist.size()-2); 
    } 

    public LinkedList<Directory> getDatalist(){ 
     return (LinkedList<Directory>) this.datalist.clone(); 
    } 

    @Override 
    public String getColumnName(int column) { 
     return this.columnNames[column];  
    } 

    @Override 
    public int getColumnCount() { 
     return Directory.numCols; 
    } 

    @Override 
    public int getRowCount() { 
     return this.datalist.size(); 
    } 

    @Override 
    public Object getValueAt(int row, int col) { 

     Directory temp = this.datalist.get(row); 

     switch(col){ 
     case 0: 
      return temp.getId(); 
     case 1: 
      return temp.getPath(); 
     case 2: 
      return temp.getWildcard(); 
     default: 
      return null;   
     } 
    } 
} 

を。どうやってやるの?

答えて

2

例:

case 3: 
    return temp.getFilters().toString(); 

注:

  • フィールドを宣言するときに行うには十分な理由を持っていない場合(インターフェース(例えばリスト)ではなく実装(LinkedListの)を使用しますさもないと)。
  • ArrayListにはまた、あなたのフィールドプライベート
  • setDatalistを保つのgetColumnClass
  • を上書き
  • (例えば、インデックスによるアクセスなど)ほとんどの場合、LinkedListのよりも優れた性能を持っています、すべての
+0

まずfireTableDataChanged感謝君は。それは抽象クラスなので、私のフィールドは保護されている必要があります。 getColumnClassをどのようにオーバーライドするのですか?つまり、columnindex = 3ならString.classを返すべきですか?またはLinkedList.class? – dierre

+0

次に、保護されたgetter(および必要に応じてsetter)を提供します。 getValueAtが返すものは何でも、この場合はString.classです。 – Puce

+0

私はゲッターとセッターを使用しています。そのクラスは本当に長いので、彼らはちょうど放棄されています。 – dierre

関連する問題