Я пытаюсь установить TextField в курсор/каретку, чтобы быть в конце, когда ключ до Выпущено:JavaFX TextField - поведение по умолчанию Override, когда до отпускания клавиши
private void setTextFieldBehaviour() {
_textField.setOnKeyPressed(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent key) {
switch (key.getCode()) {
case UP:
if (key.isControlDown()) {
... // Do something for Ctrl + UP key
break;
} else {
... // Do something for plain old UP key
_textField.end();
// _textField's cursor will go back
// to the front when the UP key is released!
break;
}
default:
break;
}
}
});
}
Однако, как указано выше в кодексе комментарий, потому что я только переопределяю метод setOnKeyPressed
, это означает, что поведение по умолчанию при отпускании клавиш будет использоваться для текстового поля JavaFX,
Следовательно, это затрудняет установку курсора TextField в конце, когда UP выдается ключ.
Я думал об переопределении setOnKeyReleased
только для UP (как показано ниже), но это имеет уродливый эффект курсора, прыгающего в переднее поле TextField, а затем прыгающего назад в конец.
_textField.setOnKeyReleased(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent key) {
switch(key.getCode()) {
case UP:
if(!(key.isControlDown())) {
... // Do something for plain old UP key
_textField.end();
// _textField's cursor will go back
// to the front when the UP key is released
// then jump back to the end again!
break;
}
default:
break;
}
}
});
Или визуально, это то, как он появляется:
Перед нажатием клавиши ничего: // Курсор помещается в конце строки
TextField [oldString |]
Нажмите UP: // Курсор перед строкой
TextField [| oldString]
Release UP: // Курсор возвращается строки
TextField [NewString |]
Так в настоящее время, я могу установить его, чтобы перейти к спине, но это влечет за собой курсор прыгает вокруг. Есть ли способ сделать это лучше?
вы можете попробовать, возможно, 'onKeyTyped'- (имя функции может быть неправильным)? и нажмите свои коды там. но поиск функции keyevent последний из них 3 – Elltz