Проблемы с TextArea (JavaFX)

 
 
 
Сообщения:10
1) Первый вопрос:
На главной сцене располагается TextArea. В него пользователь вводит текст, который в некоторых случаях должен перезаписываться (исправление ошибок, автозамена ...). В таком случае обработчикам событий нужно учитывать позицию каретки. Например, так:
textWindow.addEventFilter(MouseEvent.MOUSE_PRESSED, event -> {
        	System.out.println(textEditor.getCaretPosition());
        });

Проблема в том, что правильный ответ возвращается со второго клика, а не с первого. Как хакнуть этот баг, чтобы при клике на случайное слово в тексте позиция каретки вычислялась бы правильно с первого раза?

2) Второй вопрос:
Если пользователь ввел некорректные данные в TextArea, то нужно чтобы последнее слово стиралось, и каретка возвращалась к концу предыдущего слова. Однако на практике выясняется что в ответ на нажатие клавиши Enter каретка автоматически переходит на новую строку. Как полностью переопределить реализацию обработки события нажатия Enter? Вот скелет:
textEditor.addEventFilter(KeyEvent.KEY_PRESSED, event -> {
            if(event.getCode() == KeyCode.ENTER){
                        //Обработка
            }
});
Изменен:24 дек 2017 00:41
 
 
Сообщения:25
1 - почему на клик, а не на изменение текста? можно же поставить листенер на изменения текста - там и будет весь текст, и правильная позиция
если надо узнать что выделено - то есть selection и selectedText

2 опять же - на изменение текста, еще посмотрите на TextFlow - ваш кейс похоже лучше делать с ним (выделять, например, разным цветом слова, что в textArea не сделать)
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет