2012-05-10 4 views
-2

왜 다음 코드가 java.lang.ArrayIndexOutOfBoundsException: 0 >= 0이됩니까?JTable ArrayIndexOutOfBoundsException

JTable oTable = new JTable(); 
for (int row = 0; row < table.getRowCount(); row++) { 
    for (int column = 0; column < table.getColumnCount(); column++) { 
    oTable.setValueAt(table.getValueAt(row, column), row, column); 
    } 
} 

표가 정렬 키를 사용하여 정렬되었습니다. SortKeys가 작동하면 GUI의 뷰가 업데이트되지만 기본 데이터 (모델)는 변경되지 않습니다. 기본 모델을 변경하거나 뷰의 데이터로 새 테이블을 작성해야합니다.

DefaultTableModel model = (DefaultTableModel) table.getModel(); 
TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model); 
table.setRowSorter(sorter); 
List<RowSorter.SortKey> sortKeys = new ArrayList<RowSorter.SortKey>(); 
sortKeys.add(new RowSorter.SortKey(model.findColumn("col title"), SortOrder.DESCENDING)); 
sortKeys.add(new RowSorter.SortKey(model.findColumn("col title 2"), SortOrder.DESCENDING)); 
sortKeys.add(new RowSorter.SortKey(model.findColumn("another col title"), SortOrder.DESCENDING)); 
sorter.setSortKeys(sortKeys); //this should trigger a .sort() 

모델이 업데이트되지 않는 이유는 모르지만 그렇지 않습니다.

+4

매우 혼란 질문을 당신은 두 개의 독립적 인 JTable의 변수,'oTable'와'table'을 가지고있는 것 같습니다 있기 때문이다. oTable 변수 만 사용해야합니다. –

+4

1) EDT에서 GUI 관련 문제를 수행합니다. 2) 더 빨리 도움을 받으려면 [SSCCE] (http://sscce.org/)를 게시하십시오. –

+2

을 입력하고 예외 – andersoj

답변

5

두 JTable의 변수, oTabletable을 사용하고 있고 oTable JTable는, 0 열과 0 행을 가지고 있지만, 테이블에 의해 참조되는 JTable는, 아마하지 않습니다. 그러면 Java가 존재하지 않는 행과 열을 찾습니다. 이런 식으로 JTable 변수를 섞어서 일치시키지 마십시오. 귀하의 oTable의 모델이 비어

oTable.setModel(table.getModel()); 
+0

잘 찾아 냈습니다. +1 –

+0

@Andrew : 감사합니다. –

+0

나는 특별히 getmodel 사용을 피하고 있습니다. 모델이 아닌 jtable 뷰를 복사하고 싶습니다. – user1286505

2

:

당신은 테이블과 oTable JTables가 같은 값을 유지하려면

, 단순히 통해 모델을 전달합니다. 따라서 해당 행 및/또는 열의 인덱스 0이 존재하지 않으므로 해당 행 및 열에서 값을 설정하려고하면 ArrayIndexOutOfBoundsException: target >= size, 0 >= 0이됩니다. 내가해야 할 일을했을 무엇

+0

테이블의보기에 데이터가 있고 그 데이터로만 테이블을 만들고 싶기 때문입니다. – user1286505

0

이었다

for(int row=0; row< table.getRowCount();row++) 
{ 
    for (int column = 0; column < table.getColumnCount(); column++) { 
    rowData[column] = model.getValueAt(table.convertRowIndexToModel(row), column); 
} 
data.add(row, new Vector(Arrays.asList(rowData))); 
} 
관련 문제