我实现了一个带有自定义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个文件后告诉我的程序停止获取值?有可能吗?
答案 0 :(得分:1)
只需将该值固定为可接受的最大值:
realRow = Math.min(realRow, getRowCount());
附录:在example cited中,按如下方式实施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
。
答案 1 :(得分:1)
确保您的模型的getRowCount方法符合您的要求。 getRowCount方法应该为表返回一个可接受的数字,这样它就不会为任何不存在的行调用getValueAt。所以,如果你没有第14行,你的行数不应该那么高。
答案 2 :(得分:1)
我认为不是easy job,我建议查看aephyr's code,或许更简单的方法是实施此code,但为了实现真正的效果,您必须锁定JScrollBars
,转到NEVER