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


82

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

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

java  swing 

Answers:


137

在文本组件上调用setCaretPosition(0)会使它滚动到顶部。


没错,问题在于插入符号位于文本组件的末尾。在文本编辑器上调用“ setText(...)”之后,它也可以工作。(在JScrollPane中使用JEditorPane实例作为文本面板进行了测试)。
纪尧姆

36

以防万一您不使用文本组件,请看一下这里发布的线程...。在JScrollPane上设置滚动条

他们的解决方案是通过invokeLater剥离线程

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

1
这是最接近我的问题的答案。stackoverflow.com/ questions/ 42961012/…但是,如果JScrollPane中有面板,如何使用此方法?
In-young Choung,

3
invokeLater不会剥离线程,它只是让一个要invokeLater排队的事件在当前事件之后执行(例如,单击按钮,或者调用的代码上下文是什么),以及任何其他已经排队的事件完成。
Radiodef

10

这将使工作:

DefaultCaret caret = (DefaultCaret) textArea.getCaret();
caret.setUpdatePolicy(DefaultCaret.NEVER_UPDATE);

9

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


1
@Craig的早期答案的副本。
里希


7

您可以尝试以下方法:

 scrollPane.getViewport().setViewPosition(new Point(0,0));

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

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


4
这对我不起作用-ScrollPane跳到顶部,然后立即又下降到底部。
jwoolard 2010年

它对我有用。\ _(ツ)_ //我的JScrollPane中有一个JTable。
mikato

@jwoolard是的,这里介绍的解决方案在我遇到的许多情况下均不起作用。但是,请注意我今天早上提出的解决方案。
理查德T

2

就是这样:

textArea.setSelectionStart(0);
textArea.setSelectionEnd(0); 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.