2013-05-17 8 views
0
renbor = tabla_proveedor.getSelectedRow(); 
DefaultTableModel modelo = (DefaultTableModel) tabla_proveedor.getModel(); 
modelo.removeRow(renbor); 

코드 줄이 나를 제공 나에게 오류를 제공합니다 ... 스레드에서JTable을 사용하는 ClassCastException?

예외 "AWT-EventQueue의-0"java.lang.ClassCastException가 : javax.swing.JTable를 $ 1이 될 수 없습니다 javax.swing.table.DtaultTableModel에의 캐스트

어떻게 수정 할 수 있습니까? 테이블에서 행을 제거해야합니다.

table.setModel(new DefaultTableModel()); 

이 일반적으로 생성자 또는 GUI 기반에 갈 수도 : 난 당신이 테이블을 만들 때, 수동으로 테이블 모델을 설정해야합니다 tabla_proveedor에게

tabla_proveedor=new JTable(datos_proveedor,columna_proveedor) 

    { 
     public boolean isCellEditable(int datos_proveedor, int columna_proveedor){ 

     return false; 
     } 
     public Component prepareRenderer(TableCellRenderer r, int datos_proveedor, int columna_proveedor) 
     { 
      Component c= super.prepareRenderer(r,datos_proveedor,columna_proveedor); 

      return c; 
     } 
     }; 
+0

모델의 클래스를 알기 위해'tabla_proveedor.getModel(). getClass(). getName()'을 출력하십시오. –

+0

javax.swing.JTable $ 1 어떻게해야합니까? 나는 새로운 프로그래머이다. – Adrian

+0

'TableModel model = tabla_proveedor.getModel();'을 사용하면 어떨까? 'AbstractTableModel'도 잘 작동 할 것입니다. –

답변

8

javax.swing.JTable $ 1 어떻게해야합니까?

데이터 및 열 이름을 배열로 지정하면 JTable은 TableModel의 익명 내부 클래스를 만듭니다. "$ 1"은 이것이 사실이라고 알려줍니다.

JTable을 만드는 더 쉬운 방법은 벡터를 사용하는 생성자를 사용하는 것입니다.

DefaultTableModel model = new DefaultTableModel(data, columnNames) 
JTable table = new JTable(model); 

하지만 getColumnModel()를 사용 GetColumn이 (0) .setPreferredWidth (200); 당신은 배열을 사용하는 경우, 당신은 (산제에 의해 제안) 수동의 DefaultTableModel를 작성해야합니다.

이것은 사용중인 TableModel과 아무런 관련이 없으므로이 코드는 DefaultTableModel과 함께 계속 작동합니다.

+0

이것은 나를 위해 잘 일했다. – humphrey

3

를 인스턴스화 곳

이입니다 폼에 테이블을 추가 한 후 init 메서드를 호출합니다.

이렇게하면 클래스가 무엇인지 알 수 있습니다. 원하는 경우 사용자 정의 할 수 있습니다.

+0

를 볼 수 있도록 – Adrian

+0

+1, OP가 기대하는 모델을 수동으로 설정합니다. – camickr