Получить текст текущей строки JTextArea при нажатии клавиши Enter

Ну, может быть, это небольшая проблема, но я не мог ее понять.
Я хочу, чтобы моя программа отображала текст в текущей позиции курсора, когда я нажимаю клавишу Enter.
Вот мой текущий код:

if (evt.getKeyCode() == 10) {
  try {
    int offset=ta.getLineOfOffset(ta.getCaretPosition());
    int start=ta.getLineStartOffset(offset);
    int end=ta.getLineEndOffset(offset);

    System.out.println("ext: "+ta.getText(start, end));

  } catch (BadLocationException ex) {
    System.out.println(ex.getMessage());
  }
}  

Это работает только в первый раз, когда я нажимаю клавишу Enter, в следующий раз, когда я нажимаю ее, выдается исключение «Недопустимое местоположение».
Есть ли лучший способ сделать это?


person A-SM    schedule 04.06.2013    source источник
comment
Нажатие ввода действует как операция отправки, и курсор исчезает - вот почему вы получаете недопустимую операцию. К тому времени, когда вы нажмете Enter во второй раз, в TextArea уже не будет курсора.   -  person Jakub Zaverka    schedule 04.06.2013
comment
хм, тогда что вы предлагаете мне исправить это?   -  person A-SM    schedule 04.06.2013
comment
Вы можете сохранить последнюю известную позицию каретки и вернуть ее. Или после Enter (который запускает действие, которое может быть обработано в ActionListener), вы программно устанавливаете курсор в исходное положение.   -  person Jakub Zaverka    schedule 04.06.2013
comment
не могли бы вы привести пример @JakubZaverka? Я смущен этим..   -  person A-SM    schedule 04.06.2013


Ответы (1)


Хе-хе, решил сам:

Вот правильный код того, что я ищу:

if (evt.getKeyCode() == 10) {
  try {
    int offset=ta.getLineOfOffset(ta.getCaretPosition());
    int start=ta.getLineStartOffset(offset);
    int end=ta.getLineEndOffset(offset);

    System.out.println("Text: "+ta.getText(start, (end-start)));                
  } catch (BadLocationException ex) {
    System.out.println(ex.getMessage());
  }
}

Может быть, это полезно для другого парня там :)

person A-SM    schedule 04.06.2013