Как да промените позицията на курсора по подразбиране на JTextArea?

В предишен въпрос аз попита как да постави курсора в долната част на JTextArea. Отговорът беше textField.getDocument().getLength() Технически мога да използвам textField.getDocument().getLength() след всяко вмъкване на текст, но това не е удобно.

Обаче не точно това имах предвид. Трябва да променя СВОЙСТВОТО JTextArea на позицията на курсора. В моята програма _result е JTextArea. Той получава текстове от множество класове и методи, така че използването на textField.getDocument().getLength() всеки път след _result.append("text") не е удобно и прави кода податлив на грешки и не е гъвкав

Има ли някакъв начин да направя нещо като:

// this is just a pseudocode
_result.setDefaultCursorPosition(bottom);

и след това, когато текст отиде там (БЕЗ ЗНАЧЕНИЕ от кой клас или метод), курсорът винаги е в долната част.


person Buras    schedule 21.07.2013    source източник


Отговори (1)


Това ще премести каретката до крайната позиция след всяка промяна на документа:

_result.getDocument().addDocumentListener(new DocumentListener() {
        private void atEnd() { 
            _result.setCaretPosition(_result.getText().length()); 
        }
        public void insertUpdate(DocumentEvent evt) { atEnd(); }
        public void removeUpdate(DocumentEvent evt) { atEnd(); }
        public void changedUpdate(DocumentEvent evt) { atEnd(); }
    });

Той все още позволява на потребителя да препозиционира каретката чрез щракване или чрез други извиквания към setCaretPosition.

person osandum    schedule 27.07.2013