1

我正在对包含在滚动窗格中的表做一些工作。我正在调用的函数对表格进行操作,然后重新绘制表格,这会改变垂直滚动条的位置。我试图找出一种方法来在函数之后恢复滚动条的初始位置。这是我到目前为止的示例:

    public void lineCopy(){
    scrollPosition = jScrollPane1.getVerticalScrollBar().getValue;

    //Main body of tableCopy function here, including call to
    //getNewTable() which gets the new table

    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            jScrollPane1.getVerticalScrollBar().setValue(scrollPosition);
            System.out.println("Run Later Here");
        }
    });
    System.out.println("End of copy function");        

    }

问题是滚动条不会重置为函数之前的值,它通常会比以前更向下滚动窗口(例如,如果第 200 行在函数之前位于窗口顶部,则第 250 行在后置顶)。

这是我所知道的:invokeLater 确实在稍后根据我添加的系统输出行调用。我也知道 setValue 函数正在工作,因为如果我将它设置为 setValue(0) 而不是 setValue(scrollPosition),它每次都有效。

其他信息:我使用获取/设置视口尝试了类似的代码,并得到了类似的结果。此外,根据行中值的类型(矩阵与常量),某些行具有不同的高度。

谢谢您的帮助

4

1 回答 1

0

要滚动回顶部,什么都不做:

JscrollPane.getVerticalScrollBar.setValue()

您必须使用:

TextComponent.setCaretPosition()

代替:

JTable.scrollRectToVisible()
于 2014-04-17T06:21:07.567 回答