每次使用以下代码将文本追加到JTextArea时,我的JScrollPane都可以滚动到底部:
DefaultCaret caret = (DefaultCaret) textArea.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
但是,如果文本太长而且不适合框的可视部分,则它会向右滚动(文本区域的文字末尾)。
有没有办法可以忽略文本中的水平变化,只是自动垂直滚动(保持当前水平列被查看)。无论是这个,还是总是把它放在左侧。
答案 0 :(得分:0)
如果您使用append(String)
方法,可以轻松地将内容附加到JTextArea
,那么您还可以使用以下内容更新该区域:
public void append(String s) {
area.append(s.endsWith("\n") ? s : s + "\n"); // your choice here
area.setCaretPosition(Math.max(area.getText().lastIndexOf("\n"), 0)); // update pos
}
哪会将插入符号放在文本的最后\n
。
答案 1 :(得分:0)
您需要手动调整视口位置。因此,您可以使用以下代码创建一个append(...)方法:
public void append(JTextArea textArea, String text)
{
textArea.append( text );
Component parent = textArea.getParent();
if (parent instanceof JViewport)
{
JViewport viewport = (JViewport)parent;
Point p = viewport.getViewPosition();
if (p.x != 0)
{
p.x = 0;
viewport.setViewPosition( p );
}
}
}
或者不是更改视图位置,而是可以将Caret重置为行的开头,这将导致视口自动重置为左侧:
textArea.append( text );
textArea.setCaretPosition( Utilities.getRowStart(textArea, textArea.getCaretPosition() );