我已经在JScrollPane上嵌入了一个JTextArea,并且正在使用该JTextArea进行输出。
我希望只要输出超过JTextArea的大小,JTextArea就会自动滚动,这样用户就不必手动向下滚动来查看最近的输出。
我该怎么做呢?
我已经将JTextArea和JScrollPane的自动滚动属性都设置为true。
发布于 2009-10-27 04:10:39
在使用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);
注意:
上述设置插入符号更新策略的建议不起作用。
相反,您可能想要查看Smart Scrolling,它使用户能够确定何时应该自动滚动。
有关文本区域中自动滚动的更详细说明,可在此处找到:Text Area Scrolling
发布于 2009-11-15 08:26:47
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);
}
}
发布于 2013-12-22 03:59:34
当您在JTextArea上的任意位置单击时,可能会停止自动滚动。因为插入符号的位置改变了一次,视点也改变了。此时,您应该在追加或添加一些文本时设置插入符号位置。在我的方法中,我创建了包括设置插入符号位置的方法,然后在添加或附加任何内容时使用它。
https://stackoverflow.com/questions/1627028
复制相似问题