2014-11-25 9 views
-2

Я хочу, чтобы очистить свой собственный TableModel и получаю следующее исключение:TableModel не может быть приведен к javax.swing.table.DefaultTableModel

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: com.Test.gui.results.ResultTableModel cannot be cast to javax.swing.table.DefaultTableModel 

Я хочу, чтобы очистить мою модель вроде этого:

   DefaultTableModel model = (DefaultTableModel) resultTable.getModel(); 
       model.setRowCount(0); 

это мой ResultsTableModel:

public class ResultTableModel extends AbstractTableModel { 

    /** 
    * UUID 
    */ 
    private static final long serialVersionUID = -8928042813952799089L; 

    private String[] columnNames = {"Customer", "Test1"}; 


    private List<TestData> resultList = new ArrayList<TestData>(); 

    private TestData rs; 


    public ResultTableModel(List<TestData> resultList){ 
     this.resultList=resultList; 
    } 

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

    /** 
    * get Value at 
    */ 
    public Object getValueAt(int row, int col) { 
     TestData r = resultList.get(row); 
     switch (col) { 
     case 0: 
      return r.getCustomer(); 
     case 1: 
      return r.getEquity(); 
     case 2: 
      return r.getCyclicalRiskMarketAvg(); 
     case 3: 
      return r.getDscr_1(); 
     case 4: 
      return r.getDscr_2(); 
     case 5: 
      return r.getDscr_3(); 
     case 6: 
      return r.getDscr_4(); 
     case 7: 
      return r.getDscr_5(); 
     case 8: 
      return r.getDscr_6(); 
     case 9: 
      return r.getDscr_7(); 
     case 10: 
      return r.getDscr_8(); 
     case 11: 
      return r.getDscr_9(); 
     case 12: 
      return r.getDscr_10(); 
     case 13: 
      return r.getLtv_1(); 
     case 14: 
      return r.getLtv_2(); 
     case 15: 
      return r.getLtv_3(); 
     case 16: 
      return r.getLtv_4(); 
     case 17: 
      return r.getLtv_5(); 
     case 18: 
      return r.getLtv_6(); 
     case 19: 
      return r.getLtv_7(); 
     case 20: 
      return r.getLtv_8(); 
     case 21: 
      return r.getLtv_9(); 
     case 22: 
      return r.getLtv_10(); 
     default: 
      break; 
     } 
     fireTableDataChanged(); 
     return null; 
    } 

    public void setTestData(TestData rd){ 
     resultList.add(rd); 
     fireTableRowsInserted(resultList.size()-1, resultList.size()-1); 
    } 

    @Override 
    public String getColumnName(int index) { 
     return columnNames[index]; 
    } 

    @Override 
    public int getColumnCount() { 
     return columnNames.length; 
    } 

    /** 
    * @return the columnNames 
    */ 
    public String[] getColumnNames() { 
     return columnNames; 
    } 

    /** 
    * @param columnNames the columnNames to set 
    */ 
    public void setColumnNames(String[] columnNames) { 
     this.columnNames = columnNames; 
    } 

    /** 
    * checks if the cells are editable 
    */ 
    public boolean isCellEditable(int row, int col) { 
     return false; 
    } 

    /** 
    * @return the resultList 
    */ 
    public List<TestData> getResultList() { 
     return resultList; 
    } 

    /** 
    * @param resultList the resultList to set 
    */ 
    public void setResultList(List<TestData> resultList) { 
     this.resultList = resultList; 
    } 

    /** 
    * 
    * @return 
    */ 
    public TestData getRs() { 
     return rs; 
    } 

    /** 
    * @param rs the rs to set 
    */ 
    public void setRs(TestData rs) { 
     this.rs = rs; 
    } 

} 

Я понимаю, что мой бросок не работает. Тем не менее, я хотел бы очистить свою модель.

Любые рекомендации по очистке модели?

Я ценю ваш ответ!

UPDATE

Я добавил этот метод к моему TableModel:

public void clear() { 
    for (int i = 0; i < resultList.size(); i++) { 
     resultList.remove(i); 
    } 
    fireTableRowsDeleted(0, getRowCount()); 
} 

Однако, теперь, когда я нажимаю мою кнопку только некоторые строки удаляются, которая выглядит очень случайным образом для меня.

UPDATE 2

Это решение работает:

public void clear() { 
    resultList.clear(); 
    fireTableRowsDeleted(0, getRowCount()); 
} 

ответ

2

Сообщение предельно ясно. В вашей таблице есть модель типа ResultTableModel, которая расширяет AbstractTableModel. Вы получаете модель и передаете ее в DefaultTableModel. Но это не DefaultTableModel. Это ResultTableModel. Таким образом, вы получаете исключение.

Это как взять велосипед и притвориться, что это самолет. Это не самолет, так что вы не можете заставить его летать.

+0

Thxfor ваш ответ! Я понимаю сообщение. Что я не знаю, это способ удалить мой ResultTableModel? Следовательно, я попробовал подход DefaultTableModel, который не работает. Любые рекомендации по решению для удаления ResultTableModel? – mrquad

+1

Почему вы подразумеваете под «delete ResultTableModel»? Вы имеете в виду «очистить», т. Е. Сделать так, чтобы он больше не содержал строки? Если это так, ваша модель получает свои данные из списка, не так ли? Итак, если список очищается, то есть модель, не так ли? Поэтому добавьте метод clear() в вашу модель, который очищает список, который он использует, и запускайте соответствующее событие. –

+0

Thx много для вашего ответа! Под событием вы подразумеваете 'fireTableDataChanged();'? – mrquad