2010-11-20 33 views
1

Bu sınıf var:AbstractTableModel'de karmaşık sınıfı nasıl temsil edilir?

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

Ve bu tablo modeli yazdı: Eğer ben basit bir dize olarak göstermek çok istiyorum bir LinkedList<Filter> var görebileceğiniz gibi

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

. Bunu nasıl yapabilirim?

cevap

2

örn:

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

Not:

  • ziyade uygulanması (LinkedList) daha arabirimini (örn Liste) kullanın yapmak için iyi bir neden yoksa (alanlarını bildirirken aksi takdirde). teşekkür Herşeyden
+0

İlk fireTableDataChanged:

  • ArrayList
  • Ayrıca
  • senin alanları özel
  • setDatalist tutun getColumnClass geçersiz (örneğin endeksine göre erişimi gibi mesela) çoğu durumda LinkedList daha iyi bir performansa sahiptir sen. Alanlarımın korunmasına ihtiyacım var çünkü bu soyut bir sınıf. GetColumnClass'ı nasıl geçersiz kılarım? Demek istediğim: columnindex = 3 ise String.class değerini döndürmeli miyim? Veya LinkedList.class? – dierre

  • +0

    Ardından korumalı alıcılar (ve gerekliyse ayarlayıcılar) GetValueAt öğesi ne olursa olsun, bu durumda String.class döner. – Puce

    +0

    Getters ve setters kullanıyorum. Sadece dışarıdalar çünkü bu sınıf gerçekten çok uzun. – dierre

    İlgili konular