如何阻止 JScrollPane 在初始显示时自动滚动到底部?

How to stop JScrollPane from auto scrolling to bottom on initial display?

我有一个围绕 JTextArea 的 JScrollPane。当我填充 JTextArea 时,它会自动滚动到底部。我希望它在顶部。

这是创建它们的代码:

    caption=new JTextArea();
    caption.setLineWrap(true);
    caption.setWrapStyleWord(true);
    scrollCaption=new JScrollPane(caption);
    scrollCaption.setPreferredSize(new Dimension(180,20));
    scrollCaption.setMinimumSize(new Dimension(100,20));

这是填充它的代码:

    int fontsize=scrollCaption.getHeight()/4;
    if (fontsize<10) fontsize=10;
    caption.setFont(caption.getFont().deriveFont((float)fontsize));
        
    String path=textfile.getAbsolutePath();
    List<String> lines=Files.readAllLines(Paths.get(path));
    StringBuilder sb=new StringBuilder();
    for (String line : lines)
    {
        sb.append(line).append('\n');
    }
    caption.setText(sb.toString());
    int scrollmax=scrollCaption.getVerticalScrollBar().getMaximum();
    // scrollCaption.getVerticalScrollBar().setValue(0);
    scrollCaption.getViewport().setViewPosition(new Point(0,0));

我试着说 getVerticalScrollBar().setValue(0) 但它仍然滚动到底部。然后我尝试 getViewPort.setViewPosition(new Point(0,0)) 并且它仍然滚动到底部。也许我做这些太早了?在我这样做之后会发生某种“自动滚动到底部”吗?但是不知道什么时候才能抓到。

另一个线索:如果我滚动到顶部,然后调整 window 的大小,它会保持滚动到顶部。

我 运行 在 Java 8.

好的,我找到了解决办法。

caption.setCaretPosition(0);

像许多编程问题一样,当您知道如何去做时,事情就很简单了。

我还是不明白为什么 viewport.setLocation 不起作用。在同一程序的其他地方,我使用完全相同的函数来滚动相同的文本框。但无论如何。