我知道之前可能已经提出过这个问题,但我无法理解这个问题,希望我们可以对一个有点棘手的界面做出完整的答案。
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
但似乎它确实没有做任何事情。
如果有人可以帮助我,我将非常感激!
答案 0 :(得分:0)
将滚动代码添加到SwingUtilities.invokeLater:
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
ml.getVerticalScrollBar().setValue(0);
}
});