TableModel 无法转换为 javax.swing.table.DefaultTableModel

问题描述 投票:0回答:1

我想清除我的自定义 TableModel 并得到以下异常:

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

}

我知道我的演员阵容不起作用。但是,我想清除我的模型。

有什么建议如何清除我的模型吗?

非常感谢您的回答!

更新

我将此方法添加到我的

TableModel

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

但是,现在当我单击按钮时,只有一些行被删除,这对我来说看起来非常随机。

更新2

此解决方案有效:

public void clear() {
    resultList.clear();
    fireTableRowsDeleted(0, getRowCount());
}
java swing jtable tablemodel abstracttablemodel
1个回答
1
投票

信息非常明确。您的桌子有一个类型为

ResultTableModel
的模型,它扩展了
AbstractTableModel
。您获得模型,并将其投射到
DefaultTableModel
。但这不是
DefaultTableModel
。这是一个
ResultTableModel
。所以你会得到一个例外。

这就像拿着一辆自行车并假装它是一架飞机。它不是飞机,所以你无法让它飞起来。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.