类强制转换异常 - tabbedpane.getComponentAt(index)

时间:2014-09-23 20:40:53

标签: java swing

我试图将tabbedpanes中的表格数据导出到excel文件中&我得到了这个例外

  

javax.swing.JTable $ 1无法强制转换为javax.swing.table.DefaultTableModel

尝试像这样输出

  

DefaultReportPanel panel =(DefaultReportPanel)this.tabbedPane.getComponentAt(i);

这是DefaultReportPanel的类

public class DefaultReportPanel extends JPanel {

JScrollPane scrollPane;
JTable table;   

public DefaultReportPanel(){
    setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));

    this.scrollPane = new JScrollPane();
    this.add(scrollPane);
}

public void setTable(String[] headers, Object[][] data){
    setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
    this.table = new JTable(data, headers);
    this.table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    this.scrollPane.setViewportView(this.table);
}

public DefaultTableModel getTableModel(){
    return (DefaultTableModel) this.table.getModel();
}

这是我获得异常的方法

public LinkedHashMap<String, DefaultTableModel> getTableModels() {

    LinkedHashMap<String, DefaultTableModel> models = new LinkedHashMap<String, DefaultTableModel>();

    for(int i = 0; i < this.tabbedPane.getTabCount(); i++){         
        DefaultReportPanel panel = (DefaultReportPanel) this.tabbedPane.getComponentAt(i);
        System.out.println(this.tabbedPane.getTitleAt(i));
        if(panel != null)
        {
            models.put(this.tabbedPane.getTitleAt(i), panel.getTableModel());
        }           
    }       
    return models;
}

对缺少什么的想法?

1 个答案:

答案 0 :(得分:1)

我相信你的假设在发生异常的地方是不正确的。我认为它发生在这里:

public DefaultTableModel getTableModel(){
    return (DefaultTableModel) this.table.getModel();
}

为什么我这么认为?它是您({1}}投放到DefaultTableModel的唯一地方(您已经展示过)。创建表时,使用了JTable中的这个构造函数:

public JTable(final Object[][] rowData, final Object[] columnNames) {...}

不会创建DefaultTableModel。它创建了AbstractTableModel的实时实现。

修改

为了避免ClassCastException,一些选项是:

  1. 通过创建表确保您的表具有DefaultTableModel 你自己,然后把它交给JTable
  2. 转而使用AbstractTableModel
  3. 不要施展任何东西,只使用TableModel
  4. 答案(2)和(3)要求更改LinkedHashMap的类型