Java Swing JTable:行可见或滚动到底部时发生的事件?

Java Swing JTable:行可见或滚动到底部时发生的事件?,java,swing,scroll,jtable,Java,Swing,Scroll,Jtable,我正在寻找一种方法,当一个JTable滚动到某个特定的行可见时,或者当表的底部滚动到视图中时,如果无法看到该行,就可以得到通知。理想情况下,这应该在没有轮询的情况下完成,但是通过一些事件触发来完成。有什么想法吗?在滚动窗格的视口中添加一个ChangeListener viewport = scrollpane.getViewport(); viewport.addChangeListener(this); 然后检查可见行(也可以轻松扩展到列) public void state

我正在寻找一种方法,当一个JTable滚动到某个特定的行可见时,或者当表的底部滚动到视图中时,如果无法看到该行,就可以得到通知。理想情况下,这应该在没有轮询的情况下完成,但是通过一些事件触发来完成。有什么想法吗?

在滚动窗格的视口中添加一个
ChangeListener

    viewport = scrollpane.getViewport();
    viewport.addChangeListener(this);
然后检查可见行(也可以轻松扩展到列)

public void stateChanged(变更事件e)
{
矩形viewRect=viewport.getViewRect();
int first=table.rowAtPoint(新点(0,viewRect.y));
如果(第一个==-1)
{
return;//表为空
}
int last=table.rowAtPoint(新点(0,viewRect.y+viewRect.height-1));
如果(最后==-1)
{
last=tableModel.getRowCount()-1;//处理最后一行下面的空白
}

对于(int i=first;我检查了这个链接:-和这个:谢谢,尽管看起来我必须轮询。进一步考虑,也许我可以插入一个单元格渲染器,当它渲染器触发表示它可见的事件时。我要尝试一下。不,不是渲染器的任务-它应该是完全被动的。它可以在任何时候调用,在ore/表格可见后(调整行/列大小时为f.i.)@MeBigFatGuy请查看我的问题为什么?我正在分页。当你向下滚动到底部时,我想加载更多。
public void stateChanged(ChangeEvent e)
{
    Rectangle viewRect = viewport.getViewRect();
    int first = table.rowAtPoint(new Point(0, viewRect.y));
    if (first == -1)
    {
        return; // Table is empty
    }
    int last = table.rowAtPoint(new Point(0, viewRect.y + viewRect.height - 1));
    if (last == -1)
    {
        last = tableModel.getRowCount() - 1; // Handle empty space below last row
    }

    for (int i = first; i <= last; i++)
    {
        int row = sorter.convertRowIndexToModel(i); // or: row = i
        //... Do stuff with each visible row
    }

    if (last == tableModel.getRowCount() - 1) {} //... Last row is visible
}