Java 在 JTextArea 中禁用水平自动滚动
Java disable horizontal autoscroll in JTextArea
我使用控制台显示我的应用程序中的错误和状态消息。我可以使用复选框显示和隐藏它,效果很好。我现在的问题是有些行可能会很长(例如,如果抛出异常)并且如果它是最后一行,则插入符号位于非常正确的位置。
我想禁用水平方向的自动滚动,但保持垂直方向。我也不想删除滚动条并使用换行。我只是想摆脱我的控制台总是向右滚动。
我已经尝试过自己设置插入符号的位置,但我无法真正弄清楚应该在哪里设置。我最后一次尝试在标记文本时导致崩溃,因为我把代码放在了 caretUpdate 方法中,这似乎是错误的地方。
//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();
}
}
});
好吧实际上我发现它不起作用,因为插入符号也在我的控制台中设置 class 并因此被覆盖。
对于所有感兴趣的人,这对我来说似乎是一个很好的方法:
textArea.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
try {
textArea.setCaretPosition(
textArea.getLineStartOffset(textArea.getLineCount() - 1)
);
} catch (BadLocationException e1) {
e1.printStackTrace();
}
}
}
我使用控制台显示我的应用程序中的错误和状态消息。我可以使用复选框显示和隐藏它,效果很好。我现在的问题是有些行可能会很长(例如,如果抛出异常)并且如果它是最后一行,则插入符号位于非常正确的位置。
我想禁用水平方向的自动滚动,但保持垂直方向。我也不想删除滚动条并使用换行。我只是想摆脱我的控制台总是向右滚动。
我已经尝试过自己设置插入符号的位置,但我无法真正弄清楚应该在哪里设置。我最后一次尝试在标记文本时导致崩溃,因为我把代码放在了 caretUpdate 方法中,这似乎是错误的地方。
//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();
}
}
});
好吧实际上我发现它不起作用,因为插入符号也在我的控制台中设置 class 并因此被覆盖。
对于所有感兴趣的人,这对我来说似乎是一个很好的方法:
textArea.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
try {
textArea.setCaretPosition(
textArea.getLineStartOffset(textArea.getLineCount() - 1)
);
} catch (BadLocationException e1) {
e1.printStackTrace();
}
}
}