我实现了一个带有自定义
AbstractTableModel
的JTable来实现分页。
我想每页显示 5 个项目,但我有一个问题:如果我有 N 个项目要显示(其中 N 是 5 的倍数),一切都可以,但如果我有 14 个元素要显示,我得到一个例外。问题在于获取每个单元格值的方法超出范围。特别是方法上的问题
public Object getValueAt(int row, int col) {
int realRow = row + (pageOffset * pageSize);
return data[realRow].getValueAt(col);
}
事实上,我们有 5 行(从 0 到 4)和 14 个元素,但显然当我们尝试获取最后一个元素时,我们会这样做:
realRow = 4 + (2*5)
并且显然我在第 14 行没有元素。
我该如何解决这个问题?我如何告诉我的程序在到达第 14 个文件后停止获取值?可以吗?
确保模型的 getRowCount 方法与您希望它执行的操作一致。 getRowCount 方法应该返回表可接受的数字,这样它就不会为任何不存在的行调用 getValueAt。 因此,如果没有第 14 行,则行数不应该那么高。
只需将值固定为其可接受的最大值即可:
realRow = Math.min(realRow, getRowCount());
附录:在引用的示例中,按如下方式实现
getValueAt()
:
// Work only on the visible part of the table.
public Object getValueAt(int row, int col) {
int realRow = row + (pageOffset * pageSize);
if (realRow < data.length) {
return data[realRow].getValueAt(col);
} else {
return null;
}
}
BasicArrowButton
。