【问题标题】:How to reach at the end of the TextArea [duplicate]如何到达TextArea的末尾[重复]
【发布时间】:2012-01-26 02:32:04
【问题描述】:

可能重复:
How to set AUTO-SCROLLING of JTextArea in Java GUI?

我正在创建一个应用程序,其中用户在 TextField 中键入文本,当 actionPerformed 时,该文本将附加到 TextArea
TextArea 添加在 JScrollPane 上。当声明列的行数超出时,用户可以滚动查看文本。但是他每次通过TextFieldTextArea 输入一些文本时都需要滚动,因为附加到TextArea 的最后一行不会自动滚动到最后一行。
任何人都可以帮助我如何自动或当 actionPerformed 时,TextArea 将滚动到最后?

【问题讨论】:

  • 快速破解将是jTextArea.selectAll();

标签: java swing jscrollpane jtextarea


【解决方案1】:

神奇之处在于 DefaultCaret.updatePolicy:

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

详情请见Rob's blog entry

【讨论】:

    【解决方案2】:

    试试这个:

    jTextArea.selectAll();
    int last = jTextArea.getSelectionEnd();
    jTextArea.select(last, last);
    

    jTextArea 是对您的 TextArea 的引用。

    但是,如果有很多文本,前面的示例可能会非常慢,所以我提供了另一种方法:

    jTextArea.setCaretPosition(jTextArea.getDocument().getLength());
    

    编辑: 在网上浏览替代解决方案并阅读this answer to a similar question 后,我意识到@kleopatra 的解决方案更有效。然而,接受任何你认为合适的答案完全是你的特权(我知道你已经接受了我的)。

    @kleopatra 我支持你来补偿。 :)

    【讨论】:

    • 为什么不只是jTextArea.setCaretPosition(jTextArea.getText().length());
    • @DRCB,不,你不应该使用 getText().length()。这会导致从 Document 重建文本字符串的不必要工作。相反,您可以使用 getDocument().getLength(),它的作用相同,但效率更高。
    • @camickr 哇。教会了我一些新东西。 :) 我会改变我的答案。顺便说一句,我参考了您对类似问题的回答。
    猜你喜欢
    • 1970-01-01
    • 2019-12-31
    • 1970-01-01
    • 2017-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-23
    相关资源
    最近更新 更多