多页JTable:不能显示比行少的项目

时间:2011-12-05 17:30:33

标签: java swing jtable paging

我实现了一个带有自定义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个文件后告诉我的程序停止获取值?有可能吗?

3 个答案:

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