2011-12-22 35 views
5

可能重複:
How to set AUTO-SCROLLING of JTextArea in Java GUI?如何到達在文本區域結束

我創建一個應用程序中,用戶類型的TextField文字從文本被附加到TextArea動作已執行
JScrollPane上添加了TextArea。當用戶可以滾動查看文本時,聲明列的行數不足。但是,當他通過TextField輸入一些文本到TextArea時,他需要每次都滾動,因爲附加到TextArea的最後一行不會自動滾動到最後一行。
任何人都可以幫助我如何自動或當actionPerformed,TextArea將滾動到最後?

+0

快速技巧將是'jTextArea.selectAll();' – 2011-12-22 12:50:48

回答

3

試試這個:

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

哪裏jTextArea是你的文本區域的參考。

然而,前面的例子可能是如果有大量的文字極爲緩慢,所以我提供了另一種方式來做到這一點:

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

編輯:,在因特網上衝浪左右後替代解決方案和閱讀this answer to a similar question,我意識到@ kleopatra的解決方案是更有效的。然而,接受你認爲合適的答案完全是你的特權(我看你已經接受了我的答案)。

@kleopatra我upvoted你補償。 :)

+0

爲什麼不'的JTextArea .setCaretPosition(jTextArea.getText()。length());'? – DRCB 2011-12-22 13:08:17

+0

@DRCB哦,右大聲笑。編輯。 – fireshadow52 2011-12-22 13:09:43

+0

@DRCB,不,你不應該使用getText().length()。這導致不必要的工作來重建文檔中的文本字符串。相反,您可以使用getDocument()。getLength(),它的功能相同但效率更高。 – camickr 2011-12-22 15:55:28

5

魔術駐留在DefaultCaret.updatePolicy:

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

的詳細信息,也可參見Rob's blog entry

相關問題