TableModel无法转换为javax.swing.table.DefaultTableModel [英] TableModel cannot be cast to javax.swing.table.DefaultTableModel

查看:95
本文介绍了TableModel无法转换为javax.swing.table.DefaultTableModel的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想清除我的自定义TableModel并获取以下异常:

I want to clear my custom TableModel and get the following exception:

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

我想这样清除我的模型:

I want to clear my model like that:

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

}

我了解我的演员表无法正常工作.但是,我想清除我的模型.

I understand that my cast does not work. However, I would like to clear my model.

任何建议如何清除我的模型?

Any recommendation how to clear my model?

感谢您的回答!

更新

我将此方法添加到了TableModel:

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

但是,现在当我单击我的按钮时,仅删除了一些行,这对我来说是极为随机的.

However, now when I click my button only some rows get deleted, which looks extremely random to me.

更新2

此解决方案有效:

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

推荐答案

该消息非常清晰.您的表具有一个ResultTableModel类型的模型,该模型扩展了AbstractTableModel.您得到模型,并将其强制转换为DefaultTableModel.但这不是DefaultTableModel.这是一个ResultTableModel.这样您就可以例外了.

The message is extremely clear. Your table has a model of type ResultTableModel, which extends AbstractTableModel. You get the model, and cast it to DefaultTableModel. But it's not a DefaultTableModel. It's a ResultTableModel. So you get an exception.

那就像骑自行车假装是飞机.这不是飞机,所以不可能让它飞起来.

That's like taking a bicycle and pretend it's a plane. It's not a plane, so there's no way you can make it fly.

这篇关于TableModel无法转换为javax.swing.table.DefaultTableModel的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆