我试图将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;
}
对缺少什么的想法?
答案 0 :(得分:1)
我相信你的假设在发生异常的地方是不正确的。我认为它发生在这里:
public DefaultTableModel getTableModel(){
return (DefaultTableModel) this.table.getModel();
}
为什么我这么认为?它是您({1}}投放到DefaultTableModel
的唯一地方(您已经展示过)。创建表时,使用了JTable中的这个构造函数:
public JTable(final Object[][] rowData, final Object[] columnNames) {...}
不会创建DefaultTableModel
。它创建了AbstractTableModel
的实时实现。
修改强>
为了避免ClassCastException,一些选项是:
答案(2)和(3)要求更改LinkedHashMap的类型