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

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

有人知道怎么做吗?

【问题讨论】:

    标签: java swing


    【解决方案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);
         }
      });
      

      【讨论】:

      • 这是最接近我的问题的答案.. stackoverflow.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); 
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-02-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-09-30
          相关资源
          最近更新 更多