Поведение переопределенного ключа JavaFX TextField ВВЕРХ / ВНИЗ - PullRequest
0 голосов
/ 23 мая 2018

Я создаю пользовательский элемент управления временем с помощью TextField и хочу реализовать функцию увеличения часов или минут при нажатии клавиши ВВЕРХ.

Вот как я намеревался это сделать:

textField.setOnKeyPressed(event -> {
    int caretPos = editableNode.getCaretPosition();
    switch (event.getCode()) {
    case ESCAPE:
        getSkinnable().reset();
        event.consume();
    break;
    case UP:
        if (!getSkinnable().isInvalid()){
            if (caretPos < 3) {
                getSkinnable().increaseHour();
                selectHour();
            } else {
                getSkinnable().increaseMinute();
                selectMinute();
            }
        }
        event.consume();
    break;
    }
});

Проблема здесь в том, что клавиша UP по умолчанию устанавливает курсор в начало текста.

Я уже нашел этот пост: Текстовое поле JavaFX - переопределить поведение по умолчанию, когдаклавиша up выпущена

Но событие, которое устанавливает курсор в начале текста, предшествует моему обработчику событий, так что это мне не помогло.

Кто-нибудь знает, как я могу "переопределить "это поведение?

1 Ответ

0 голосов
/ 24 мая 2018

Решение @James_D решило мою проблему.

textField.addEventFilter(KeyEvent.KEY_PRESSED, event -> {
    int caretPos = editableNode.getCaretPosition();
    switch (event.getCode()) {
    case ESCAPE:
        getSkinnable().reset();
        event.consume();
    break;
    case UP:
        if (!getSkinnable().isInvalid()){
            if (caretPos < 3) {
                getSkinnable().increaseHour();
                selectHour();
            } else {
                getSkinnable().increaseMinute();
                selectMinute();
            }
        }
        event.consume();
    break;
    }
});
...