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 并让它滚动回顶部的主要内容,如果未能解决你的问题,请参考以下文章