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

Смежные вопросы