为什么以下代码会产生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()
我不知道为什么模型不会更新,但事实并非如此。
答案 0 :(得分:5)
您正在使用两个JTable变量oTable
和table
,而oTable
JTable有0列和0行,但表引用的JTable可能不会。这将导致Java查找不存在的行和列。不要以这种方式混合和匹配JTable变量。
如果您希望表和oTable JTable保持相同的值,只需将模型传递给:
oTable.setModel(table.getModel());
答案 1 :(得分:2)
您的oTable模型为空。因此,其行和/或列的索引0不存在,因此当您尝试在该行和列设置值时ArrayIndexOutOfBoundsException: target >= size, 0 >= 0
。
答案 2 :(得分: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)));
}