我在JScrollPane中嵌入了一個JTextArea,並使用該JTextArea進行輸出。如何在Java GUI中設置JTextArea的自動SCROLLING?
我希望每當輸出超出JTextArea的大小時,JTextArea會自動滾動,以便用戶不必手動向下滾動以查看最近的輸出。
我該怎麼做?
我已經將JTextArea和JScrollPane的autoscroll屬性設置爲true。
我在JScrollPane中嵌入了一個JTextArea,並使用該JTextArea進行輸出。如何在Java GUI中設置JTextArea的自動SCROLLING?
我希望每當輸出超出JTextArea的大小時,JTextArea會自動滾動,以便用戶不必手動向下滾動以查看最近的輸出。
我該怎麼做?
我已經將JTextArea和JScrollPane的autoscroll屬性設置爲true。
使用JDK1.4.2(或更早),您將在論壇上找到最常見的建議是使用如下代碼:
textArea.append(...);
textArea.setCaretPosition(textArea.getDocument().getLength());
但是,我剛纔注意到,在JDK5這個問題實際上已通過API更改得到解決。您現在可以通過在文本區域的DefaultCaret上設置屬性來控制此行爲。使用這種方法的代碼如下:
JTextArea textArea = new JTextArea();
DefaultCaret caret = (DefaultCaret)textArea.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
一個這個話題的更詳細的描述可以在這裏找到:Text Area Scrolling
JScrollBar vbar = scrollPane.getVerticalScrollBar();
for (int i = 0; i < 20; i++) {
myJTxt.append("This is text " + i + "\n");
vbar.setValue(vbar.getMaximum());
vbar.paint(vbar.getGraphics());
myJTxt.scrollRectToVisible(myJTxt.getVisibleRect());
myJTxt.paint(myJTxt.getGraphics());
try {
Thread.sleep(250);
} catch (InterruptedException ex) {
Logger.getLogger(ScrollTextView.class.getName()).log(Level.SEVERE, null, ex);
}
}
試試這個:
JTextArea jTextArea = new JTextArea();
JScrollPane jScrollPane = new JScrollPane();
jScrollPane.setViewport(jTextArea);
不是.............. – mKorbel 2013-11-14 13:26:08
當你點擊任何地方了JTextArea,自動滾動有可能被停止。因爲脫字符號的位置一旦改變,觀點也改變了。在這段時間,當你附加或添加一些文本時,你應該設置插入符的位置。在我的路上,我製作了包括設置插入位置的方法,然後在添加或追加任何內容時使用它。
JTextArea jTextArea = new JTextArea();
DefaultCaret caret = (DefaultCaret)jTextArea.getCaret();
caret.setUpdatePolicy(DefaultCaret.OUT_BOTTOM);
使用這個代替
JTextArea textArea = new JTextArea();
DefaultCaret caret = (DefaultCaret)textArea.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
scrollPane = new JScrollPane();
scrollPane.add(textArea);
scrollPane.setViewportView(textArea);
@camickr,我無法訪問的鏈接,我坐在一個企業防火牆後面。你可以發佈重要的東西從那個鏈接,我會投票給你:)謝謝。 – 2009-10-27 03:42:28
任何想法爲什麼這可能不工作(爲什麼它的價值表格是使用Netbeans構建器創建的)? – 2013-07-15 22:02:41
@ cyber-monk,編號創建一個SSCCE。如果它仍然不起作用,那麼你可以創建一個問題併發布你的SSCCE。 – camickr 2013-07-16 00:19:39