2012-06-15 2 views
1

내 테이블의 모든 행을 삭제하는 데 문제가 하나 있는데 jtable이있는 Jpanel이 하나 있는데 그 행을 선택하면 해당 행 값이 표시되고 동일한 패널의 다른 버튼을 클릭하면 테이블을 다시로드, 여기에, 나는 예외jtable의 모든 행을 삭제하는 방법은 무엇입니까?

을 문제 받고 있습니다
Exception in thread "AWT-EventQueue-0" 

    java.lang.ArrayIndexOutOfBoundsException: 0 >= 0 
     at java.util.Vector.elementAt(Unknown Source) 
     at javax.swing.table.DefaultTableModel.getValueAt(Unknown Source) 
     at javax.swing.JTable.getValueAt(Unknown Source) 
     at Testsample$16.valueChanged(Testsample.java:1516) 

나는 거의 지금은이 방법을 사용하여 테이블 의 행을 삭제하기 위해 모든 방법을 사용

while (table.getRowCount() > 0) { 
        ((DefaultTableModel) table.getModel()).removeRow(0); 
       } 

참고 : 모든 컨트롤이 동일 할 때이 샘플 응용 프로그램에 두 개의 패널을 사용합니다. 두 번째 패널에있는 테이블을 설정하면 예외가 발생합니다.이 문제는 어떻게 해결 될지 알 수 있습니다.

답변

6

당신이보고있는 예외는 스윙 스레드에서 오는 (AWT-EventQueue의-0). JTable가 다른 스레드에서 DefaultTableModel을 수정하고있는 동시에 (스윙 스레드에서) 자체적으로 그리기 때문에 예외가 발생합니다.

하지 마세요! 테이블 모델에 대한 모든 변경 사항은 스윙 스레드에서 발생해야합니다.

는 사용 EventQueue.invokeLater(new Runnable() {...}); 또는 비슷한

Last word in Swing Threads를 참조하십시오.

6

시도해보십시오. 코드 ..

DefaultTableModel dm = (DefaultTableModel)table.getModel(); 
dm.getDataVector().removeAllElements(); 
+0

그 코드가 Swing 이벤트 스레드에서 실행되지 않는다면 여전히 예외가 발생할 수 있습니다. – Enwired

2

이 내 방법 :

DefaultTableModel model=(DefaultTableModel)table.getModel(); 
      int rc= model.getRowCount(); 
      for(int i = 0;i<rc;i++){ 
       model.removeRow(0); 
      } 
관련 문제