多页JTable:无法显示少于行的项目

问题描述 投票:0回答:3

我实现了一个带有自定义

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 个文件后停止获取值?可以吗?

java swing pagination jtable
3个回答
1
投票

确保模型的 getRowCount 方法与您希望它执行的操作一致。 getRowCount 方法应该返回表可接受的数字,这样它就不会为任何不存在的行调用 getValueAt。 因此,如果没有第 14 行,则行数不应该那么高。


1
投票

我认为这不是容易的工作,我建议看看aephyr的代码,也许更简单的方法是实现这个代码,但为了真正的效果你必须锁定

JScrollBars
,切换到NEVER


1
投票

只需将值固定为其可接受的最大值即可:

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

© www.soinside.com 2019 - 2024. All rights reserved.