2014-09-23 5 views
0

나는이 예외를 받고 있어요 &를 Excel 파일로 tabbedpanes의 테이블 데이터를 내보낼려고클래스 캐스트 예외 - tabbedpane.getComponentAt (인덱스)

javax.swing.JTable를 $ 1이 될 수 없습니다 이

DefaultReportPanel 패널 = (DefaultReportPanel) this.tabbedPane.getComponentA 같은 출력을 시전하는 동안 javax.swing.table.DefaultTableModel

캐스팅 t (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

귀하의 가정은 예외가 발생하는 위치에 대해 잘못된 것으로 생각됩니다. 나는 그것이 여기에서 일어나고 있다고 생각한다 :

나는 그것을 생각한다? DefaultTableModel으로 전송하는 유일한 장소 (표시 한 곳)입니다.

DefaultTableModel를 생성하지 않습니다 : 당신이 당신의 테이블을 생성 할 때의 JTable에서이 생성자를 사용했다. AbstractTableModel의 즉석 구현을 만듭니다.

는 편집 :

이는 ClassCastException을 방지하기 위해, 몇 가지 옵션은 다음과 같습니다

  1. 이 JTable의
  2. 캐스트로 제공 한 후 스스로 을 만들고하여 테이블 DefaultTableModel를이 있는지 확인 대신 AbstractTableModel
  3. 무엇이든 캐스트하고 TableModel을 사용하지 마십시오.

답변 (2)와 (3)은 LinkedHashMap 유형을 변경해야합니다.

+0

내 프로그램을 실행하기 위해 어떻게 변경해야합니까? – SilentCoder

+0

(1) 테이블을 직접 생성하여 JTable에 제공하거나 (2) AbstractTableModel로 캐스트하거나, (3) 아무것도 캐스팅하지 않고 TableModel을 사용하여 DefaultTableModel을 테이블에 저장하십시오. 답변 (2)와 (3)은 LinkedHashMap의 유형을 변경해야합니다. – splungebob

+0

굉장 !! (1) 완벽하게 작동합니다. 고맙습니다. 답안에 귀하의 의견을 적어 주시면 도움이 될 것입니다. – SilentCoder

관련 문제