2012-05-10 18 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を使用してソートされています。 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

次の2つの独立したJTableの変数、 'oTable'と' table'を持っているように見えますので、非常に紛らわしい質問。 oTable変数だけを使うべきです。 –

+4

1)EDTでGUI関連の問題を実行します。 2)すぐにより良い助けを得るために、[SSCCE](http://sscce.org/)を投稿してください。 –

+2

を入力し、スタックトレースを例外 – andersoj

答えて

5

次の2つのJTableの変数、oTable、およびtableを使用している、とoTable JTableは0列と0の行を持っていますが、テーブルによって参照さJTableはおそらくありません。これにより、存在しない行と列をJavaが検索します。この方法でJTable変数を混在させたり、一致させたりしないでください。あなたは、テーブルとoTable JTablesが同じ値を保持したい場合は

することは、単純に上のモデルを渡す:

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

よく見つかる+1 –

+0

@Andrew:ありがとう。 –

+0

私は特にgetmodelの使用を避けています。私はモデルではなく、jtableビューをコピーしたいと思います。 – user1286505

2

あなたoTableのモデルは空です。その結果、その行および/または列のインデックス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))); 
} 
関連する問題