(При поиске в stackoverflow я видел, что этот вопрос адресован для Javascript, но не для JavaFX)
У меня есть TextArea, который фактически является основным текстовым редактором в приложении, подобном текстовому процессору (т. е. я предполагаю, что пользователь будет проводить много времени, работая внутри этого TextArea). Когда пользователь вводит вкладку в TextArea, я хотел бы, чтобы курсор был помещен в конец TextArea, чтобы пользователь мог продолжить редактирование с конца того, что он в последний раз набрал.
Я реализовал это с помощью ChangeListener (код ниже), и он имеет желаемое поведение. Однако, поскольку курсор помещается в конец TextArea каждый раз при получении фокуса, то, если бы я переключал приложения, а затем переключался обратно, курсор перемещался. Это неудобно, если, например, пользователь набирает предложение где-то в середине TextArea, переключается на чтение электронной почты, а затем переключается обратно и обнаруживает, что его курсор переместился.
Существует ли политика обхода фокуса, которая делает это или какой-либо другой способ реализовать это, чтобы курсор перемещался в конец только тогда, когда пользователь переходит в TextArea? Мне кажется, что это было бы обычно желаемым поведением: чтобы курсор всегда появлялся в конце TextArea всякий раз, когда TextArea находится на вкладке, но в противном случае оставлял курсор без движения.
TextArea passageTextArea;
passageTextArea.focusedProperty().addListener(new ChangeListener<Boolean>() {
@Override
public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue)
{
if (newValue.booleanValue()) {
passageTextArea.positionCaret(passageTextArea.getText().length());
}
}
});