如何设置滚动到顶部 - JPanel 在 Jscrollpane 中有多个 JTextareas

In-*_*ung 3 java user-interface swing jpanel jscrollpane

我在 JScrollPane 中有一个 JPanel。JPanel 垂直包含多个 JTextAreas。

我喜欢在页面刷新时将滚动窗格的滚动保持在顶部。目前,滚动总是从底部开始。

这是我当前的代码,它不起作用..

    panel.invalidate();
    panel.revalidate();
    panel.repaint();
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            ((JPanel) panel).setLocation(new Point(0, 0));
        }
    });
Run Code Online (Sandbox Code Playgroud)

我也尝试将下面的代码添加到滚动窗格中,但它不起作用..

scrollPanel.getViewport().setViewPosition( new Point(0, 0) );
Run Code Online (Sandbox Code Playgroud)

我研究了其他 stackoverflow 问题,他们在 Jscrollpane 中使用了 Jtextarea(他们使用 setCaretPosition(0) 解决了这个问题,但是我不能对面板使用相同的功能)。就我而言,还有一个额外的层。

我该如何解决这个..?

编辑**

根据 Pavlo Viazovskyy 的建议,我也在下面尝试过这个,但它仍然对我不起作用.. :(

    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            scrollPane.getVerticalScrollBar().setValue(0);
        }
    });
Run Code Online (Sandbox Code Playgroud)

In-*_*ung 6

非常感谢您的所有评论。抱歉,我没有在问题中给出完整正确的示例,因为涉及到太多不同的类。

在我的情况下,ScrollPane 内 Panel 内的 textareas,默认情况下,我通过使用 setViewPosition 方法在 invokelater 方法中使用 scrollPane 滚动到顶部。

SwingUtilities.invokeLater(new Runnable() {
    @Override
    public void run() {
        scrollPane.getViewport().setViewPosition( new Point(0, 0) );
    }
});
Run Code Online (Sandbox Code Playgroud)