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

问题描述

我有一个包裹在 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)) 并且它仍然滚动到底部。也许我做这些太快了?在我这样做之后会发生某种“自动滚动到底部”吗?但我不知道我还能在什么时候抓住它。

一个线索:如果我滚动到顶部,然后调整窗口大小,它会一直滚动到顶部。

我使用的是 Java 8。

解决方法

好的,我找到了解决方案。

caption.setCaretPosition(0);

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

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