Java Swing - 使用JScrollPane并将其滚动回顶部

75 java swing

我正在使用JScrollPane来允许在具有文本组件的JFrame中滚动,该文本组件用作文本编辑器.在我在此编辑器中设置文本后,我想要做的是将其向上滚动到顶部,这样您就可以看到文件开头的内容.

有谁知道如何做到这一点?

小智 128

在文本组件上调用setCaretPosition(0)将使其滚动到顶部.


Eri*_*ner 35

如果您不使用文本组件,请查看此处发布的主题.... 在JScrollPane上设置滚动条

他们的解决方案是通过invokeLater分离一个线程

final JScrollPane scroll = new JScrollPane(text);
javax.swing.SwingUtilities.invokeLater(new Runnable() {
   public void run() { 
       scroll.getVerticalScrollBar().setValue(0);
   }
});
Run Code Online (Sandbox Code Playgroud)

  • `invokeLater`不会剥离线程,它只是使一个事件在当前事件之后排队(例如,单击按钮或调用`invokeLater`的代码的上下文是什么),并且任何其他已经排队的事件完成。 (2认同)

小智 10

这将使工作:

DefaultCaret caret = (DefaultCaret) textArea.getCaret();
caret.setUpdatePolicy(DefaultCaret.NEVER_UPDATE);
Run Code Online (Sandbox Code Playgroud)


小智 8

您可以setCaretPosition(0)setText(String t)文本组件之后使用该方法.

  • @Craig 之前的答案的副本。 (3认同)

yka*_*ich 7

使用JComponent.scrollRectToVisible()

如果您需要更多信息,请参阅此文章


Vin*_*nie 6

你可以试试这个:

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

根据JavaDocs,setViewPosition()的行为如下:

设置显示在视口左上角的视图坐标,如果没有视图则不执行任何操作.

  • 这对我来说不起作用 - ScrollPane跳到顶部,然后立即再次下降到底部. (4认同)