2010-11-20 8 views
1

Ich habe diese Klasse:Wie stellt man komplexe Klassen in einem AbstractTableModel dar?

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 */ 
} 

Und ich diese Tabelle Modell schrieb:

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

Wie Sie Ich habe einen LinkedList<Filter> sehen kann, dass ich als einfacher String zeigen möchte. Wie kann ich das machen?

Antwort

2

zB:

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

Hinweis:

  • die Schnittstelle verwenden (zB List) anstelle der bloßen Umsetzung (LinkedList) bei der Deklaration Felder (wenn Sie nicht einen guten Grund haben zu tun Andernfalls).
  • Arraylist hat eine bessere Leistung als LinkedList in den meisten Fällen (zB wie der Zugang durch den Index)
  • auch außer Kraft setzen getColumnClass
  • Ihre Felder privaten
  • setDatalist halten: fireTableDataChanged
+0

Zunächst einmal danke Sie. Ich brauche meine Felder geschützt, weil das eine abstrakte Klasse ist. Wie überschreibe ich getColumnClass? Ich meine: Soll String.class zurückgegeben werden, wenn Spaltenindex = 3? Oder LinkedList.class? – dierre

+0

Dann stellen Sie geschützte Getter (und Setter, falls erforderlich) Was immer getValueAt zurückgibt, so String.class in diesem Fall. – Puce

+0

Ich benutze Getter und Setter. Sie werden einfach weggelassen, weil diese Klasse wirklich lang ist. – dierre