重新验证后,将垂直滚动设置为当前位置

时间:2014-09-23 17:02:13

标签: java swing scrollbar jscrollpane

我知道之前可能已经提出过这个问题,但我无法理解这个问题,希望我们可以对一个有点棘手的界面做出完整的答案。

GUI可以描述如下: 应用程序扩展了JFrame。应用程序添加了JPanel mPanel。 mPanel添加了一个JScrollPane ml,其中包含一个扩展JPanel的MoviePanel。

JScrollPane ml具有垂直滚动功能。我的目标是,一旦MoviePanel的内容发生变化,并在其上运行revalidate(),滚动窗格就不应该像目前那样滚动到底部。相反,我希望滚动到更改为MoviePanel之前的位置。给人一种从不滚动的感觉。

我尝试在运行revalidate()方法后手动设置滚动位置:

removeAll(); // Removes all components from the JPanel MoviePanel
add(mList()); // Adds a bunch of content (other JPanels) to MoviePanel
revalidate();
ml.getVerticalScrollBar().setValue(0); // Scroll to top (don't work) - and I'd like this value to be the position of the scroll before these lines started to run

但似乎它确实没有做任何事情。

如果有人可以帮助我,我将非常感激!

1 个答案:

答案 0 :(得分:0)

将滚动代码添加到SwingUtilities.invokeLater:

SwingUtilities.invokeLater(new Runnable()
{
    @Override
    public void run()
    {
        ml.getVerticalScrollBar().setValue(0);
    }
});