2012-06-20 121 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

相关问题