Java 在 JTextArea 中禁用水平自动滚动

Posted

技术标签:

【中文标题】Java 在 JTextArea 中禁用水平自动滚动【英文标题】:Java disable horizontal autoscroll in JTextArea 【发布时间】:2015-03-10 18:32:19 【问题描述】:

我使用控制台在我的应用程序中显示错误和状态消息。我可以使用复选框显示和隐藏它,效果很好。我现在的问题是有些行可能很长(例如,如果抛出异常),如果它是最后一行,插入符号就在正确的位置。

我想禁用水平方向的自动滚动,但保持垂直方向。另外我不想删除滚动条并使用换行。我只是想摆脱我的控制台总是向右滚动。

我已经尝试自己设置插入符号的位置,但我无法真正弄清楚我应该在哪里设置。我最后一次尝试是在标记文本时导致崩溃,因为我将代码放入 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();
    
  
);

【问题讨论】:

你能在违规条目后附加\n吗? 不幸的是不是真的,因为在大多数情况下我只是重定向 StdOut 和 StdErr。在某些情况下我可以,但这只能部分解决问题,即使这是一个好主意!谢谢你 【参考方案1】:

好吧,实际上我发现它不起作用,因为 Caret 也在我的 Console 类中设置,因此被覆盖。

对于所有感兴趣的人来说,这对我来说似乎是一个不错的方法:

    textArea.getDocument().addDocumentListener(new DocumentListener() 
        @Override
        public void insertUpdate(DocumentEvent e) 
            try 
                textArea.setCaretPosition(
                   textArea.getLineStartOffset(textArea.getLineCount() - 1)
                );
             catch (BadLocationException e1) 
                e1.printStackTrace();
            
        
    

【讨论】:

以上是关于Java 在 JTextArea 中禁用水平自动滚动的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Java GUI 中设置 JTextArea 的自动滚动?

Java / Swing:JScrollPane中的JTextArea,如何防止自动滚动?

JTextArea中开启了自动换行怎么得到文本框中的行数

自动调整大小和滚动的 Java JTextArea

java中 JTextArea类的属性和方法是啥

如何保持 JTextArea 的大小不变?