2015-01-12 4 views
0

Я использую консоль для отображения ошибок и сообщений о статусе в приложении. Я могу показать и скрыть его, используя флажок, который работает очень хорошо. Моя проблема в том, что некоторые строки могут быть довольно длинными (например, если выбрано исключение), и если это последняя строка, Caret находится в самом правильном положении.Java отключает горизонтальную автопрокрутку в JTextArea

Я хочу отключить автопрокрутку в горизонтальном направлении, но держать ее вертикально. Кроме того, я НЕ хочу удалять полосу прокрутки и использовать linewrapping. Я просто хочу избавиться от моей консоли, всегда прокручиваемой вправо.

Я уже пробовал самостоятельно устанавливать положение Каре, но я не мог понять, где я должен это делать. Моя последняя попытка привела к сбою при маркировке текста, потому что я поместил код в метод 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(); 
    } 
    } 
}); 
+0

Может вы добавите '\ n' после записи нарушителей? – trashgod

+0

К сожалению, нет, потому что я просто перенаправляю StdOut и StdErr в большинстве случаев. В некоторых я мог, но это лишь частично устранит проблему, даже если это хорошая идея! Спасибо за это –

ответ

0

Хорошо на самом деле я узнал, что это не сработало, потому что 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(); 
      } 
     } 
    }