2012-06-20 169 views
0

刷新JTable時出現問題。我從一個空的ArrayList開始,在設置我選擇的組合框後,我將內容加載到ArrayList,但JTable不響應它 - 它仍然是空的。這是TableModel的問題嗎?數據發生變化時刷新JTable

這是我的代碼...

public class ProjectTableModel extends AbstractTableModel{ 

    private static final long serialVersionUID = 1L; 

    private static ArrayList<String> caseList = new ArrayList<String>(); 

    @Override 
    public int getColumnCount() { 
     return 1; 
    } 

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

    @Override 
    public Object getValueAt(int row , int col) { 
     getRowCount(); 
     switch(col){ 
      case 0: 
       System.out.println("mam to"); 
       return caseList.get(row); 
     } 
     return null;    
    } 


    public void setCaseList(String[] list){ 
     for (int i =list.length - 1; i >= 0; i--) { 
      caseList.add(list[i]); 
     } 
     System.out.println(getRowCount()); 
     fireTableDataChanged(); 
    } 

    public String setValueAt(int row, int col){ 
     return null; 
    } 

    public void addTestCase(String name) throws IOException{  
     File newDir = new File(TestCaseMaker.currentDir, 
      "Przypadek testowy"+(caseList.size()+1)); 
     newDir.createNewFile(); 
     caseList.add(name); 

     fireTableDataChanged(); 
    } 

    public String getColumnName(int col) { 
     return "Przypadki testowe"; 
    } 
} 

回答

2

你實現setValueAt()不正確。它有錯誤的簽名,並且未能通知其觀點。

附錄:JTable不發生反應的任何變化的數據模型

作爲參考,EnvTableTest是使用AbstractTableModel該排除編輯的示例; isCellEditable()的默認實現總是返回false

@Override 
public void setValueAt(Object aValue, int row, int col) { 
    if (col == 1) { 
     System.out.println("setValueAt: " + row + " " + aValue); 
     // update caseList here 
     this.fireTableCellUpdated(row, col); 
    } 
} 

有一個相關的例子here

+0

恐怕我還是沒有明白... – Swemack

+0

只是出於好奇...如果你有一個不可編輯的表模型(這是不可編輯的,因爲沒有編輯器在'JTable'上)。我認爲這種方法在這種情況下根本不會被調用 – Robin

+0

即使我的JTable沒有對數據模型的任何改變做出反應(ArrayList中內容的改變)。我在其他項目中使用了一個類似的網絡模型,它的工作非常完美。 – Swemack

相關問題