Java Swing - 使用 JScrollPane 并让它滚动回顶部

Posted

技术标签:

【中文标题】Java Swing - 使用 JScrollPane 并让它滚动回顶部【英文标题】:Java Swing - Using JScrollPane and Having it scroll back to top 【发布时间】:2010-09-22 09:51:34 【问题描述】:

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

有人知道怎么做吗?

【问题讨论】:

【参考方案1】:

使用JComponent.scrollRectToVisible()

如果您需要更多信息,here's an article

【讨论】:

【参考方案2】:

你可以试试这个:

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

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

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

【讨论】:

这对我不起作用 - ScrollPane 跳到顶部,然后又立即下降到底部。 它对我有用¯\_(ツ)_/¯ 我的 JScrollPane 中有一个 JTable。 @jwoolard 是的,这里介绍的解决方案在我遇到的许多情况下都不起作用。但是,请注意我今天早上提出的解决方案。【参考方案3】:

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

【讨论】:

你是对的,问题在于插入符号位于文本组件的末尾。在文本编辑器上调用“setText(...)”后它也可以工作。 (使用 JEditorPane 实例作为 JScrollPane 内的文本面板进行测试)。【参考方案4】:

以防万一您不使用文本组件,请查看此处发布的线程....Setting Scroll Bar on a JScrollPane

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

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

【讨论】:

这是最接近我的问题的答案.. ***.com/questions/42961012/… 但是,如果 JScrollPane 中有面板,如何使用此方法? invokeLater 不会分离线程,它只是将要在当前事件之后执行的事件排入队列(例如,单击按钮,或者调用invokeLater 的代码的上下文)并且任何其他已经排队的事件完成。【参考方案5】:

这将使工作:

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

【讨论】:

【参考方案6】:

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

【讨论】:

@Craig 早期答案的副本。【参考方案7】:

方法如下:

textArea.setSelectionStart(0);
textArea.setSelectionEnd(0); 

【讨论】:

以上是关于Java Swing - 使用 JScrollPane 并让它滚动回顶部的主要内容,如果未能解决你的问题,请参考以下文章

java的swing组件的使用

java 使用swing制作一个小闹钟,包含以下功能:

java swing怎样开发出漂亮的界面

使用 Java 在 GUI 编程中混合 awt 和 swing

将字体导入java(不使用Swing)

java里的swing是啥意思,为啥取名swing