-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

您正在使用两个 JTable 变量 、oTabletable,并且oTableJTable 有 0 列和 0 行,但 table 引用的 JTable 可能没有。这将导致 Java 查找不存在的行和列。不要以这种方式混合和匹配 JTable 变量。

如果您希望表和 oTable JTables 保持相同的值,只需将模型传递过来:

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 回答