-2

次のコードが結果になるのはなぜjava.lang.ArrayIndexOutOfBoundsException: 0 >= 0ですか?

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

3 に答える 3

5

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

テーブルとoTableJTablesに同じ値を保持させたい場合は、モデルを渡すだけです。

oTable.setModel(table.getModel());
于 2012-05-10T01:14:42.923 に答える
2

oTableのモデルは空です。その結果、その行または列、あるいはその両方のインデックス0が存在しないため、ArrayIndexOutOfBoundsException: target >= size, 0 >= 0その行および列に値を設定しようとすると、

于 2012-05-10T01:15:18.213 に答える
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)));
}
于 2012-05-10T17:59:32.083 に答える