Java在JTextArea中禁用水平自动滚动
我使用控制台显示应用程序中的错误和状态消息。我可以使用一个复选框来显示和隐藏它,这非常有效。我现在的问题是,有些行可能相当长,例如,如果抛出异常,并且如果是最后一行,插入符号位于非常正确的位置 我想禁用水平方向的自动滚动,但保持垂直方向。此外,我不想删除滚动条并使用换行。我只是想摆脱我的控制台总是滚动到右边 我已经试过自己设置插入符号的位置,但我无法真正弄清楚我应该在哪里这样做。我最后一次尝试是在标记文本时导致崩溃,因为我将代码放入了caretUpdate方法,该方法似乎是错误的Java在JTextArea中禁用水平自动滚动,java,swing,textarea,jtextarea,autoscroll,Java,Swing,Textarea,Jtextarea,Autoscroll,我使用控制台显示应用程序中的错误和状态消息。我可以使用一个复选框来显示和隐藏它,这非常有效。我现在的问题是,有些行可能相当长,例如,如果抛出异常,并且如果是最后一行,插入符号位于非常正确的位置 我想禁用水平方向的自动滚动,但保持垂直方向。此外,我不想删除滚动条并使用换行。我只是想摆脱我的控制台总是滚动到右边 我已经试过自己设置插入符号的位置,但我无法真正弄清楚我应该在哪里这样做。我最后一次尝试是在标记文本时导致崩溃,因为我将代码放入了caretUpdate方法,该方法似乎是错误的 //Preve
//Prevent horizontal autoscroll
textArea.addCaretListener(new CaretListener() {
@Override
public void caretUpdate(CaretEvent e) {
try {
textArea.setCaretPosition(textArea.getLineStartOffset(textArea.getLineCount() - 1));
} catch (BadLocationException e1) {
e1.printStackTrace();
}
}
});
好的,实际上我发现它不起作用,因为插入符号也在我的控制台类中设置,因此被覆盖 对于所有感兴趣的人来说,这似乎是一个很好的方法:
textArea.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
try {
textArea.setCaretPosition(
textArea.getLineStartOffset(textArea.getLineCount() - 1)
);
} catch (BadLocationException e1) {
e1.printStackTrace();
}
}
}
您能在有问题的条目后面追加\n吗?不幸的是,不是这样,因为在大多数情况下我只是重定向StdOut和StdErr。在某些情况下我可以,但这只能部分解决问题,即使这是个好主意!谢谢你