Подтвердить что ты не робот

Как выполнить задание на JavaFX TextField на onfocus и outfocus?

Я работаю над проектом JavaFX. Мне нужно выполнить некоторую задачу на JavaFX TextField.

Например, в событии "on focus" для TextField я хочу напечатать

System.out.println("Textfield on focus");

а в событии "out focus" он должен распечатать

System.out.println("Textfield out focus");
4b9b3361

Ответ 1

Я подумал, что было бы полезно увидеть пример, который указывает ChangeListener как анонимный внутренний класс, например scottb.

TextField yourTextField = new TextField();
yourTextField.focusedProperty().addListener(new ChangeListener<Boolean>()
{
    @Override
    public void changed(ObservableValue<? extends Boolean> arg0, Boolean oldPropertyValue, Boolean newPropertyValue)
    {
        if (newPropertyValue)
        {
            System.out.println("Textfield on focus");
        }
        else
        {
            System.out.println("Textfield out focus");
        }
    }
});

Я надеюсь, что этот ответ будет полезен!

Ответ 2

Вы можете использовать focusedProperty Node чтобы присоединить ChangeListener.

Расширяя ответ от Брендана: из JavaFX8 (как это происходит с Java 8), лямбда-выражение в сочетании с троичным оператором может сделать его действительно компактным:

textField.focusedProperty().addListener((obs, oldVal, newVal) -> 
    System.out.println(newVal ? "Focused" : "Unfocused"));

Ответ 3

Вы хотите прикрепить ChangeListener к FocusProperty TextField, который вы хотите контролировать.

В JavaFX вы можете присоединить уведомления (Change или Invalidation Listeners) к любому свойству JavaFX, которое может иметь объект, если свойство соответствует минимальному определению для JavaFX bean.

Обратитесь к этому сообщению, если ваши обработчики событий будут выполнять другие действия, такие как изменение настроек "Отмена" или "Настройки по умолчанию": JavaFX 2 - Установка свойства defaultButton: взаимоисключающий?

Вот несколько примеров, чтобы прикрепить прослушиватель изменений к текстовому полю:

txtDx.focusedProperty().addListener(m_txtDxListener);

Объект Listener хранится в поле экземпляра, поэтому его можно использовать как с addListener(), так и с removeListener(). Для недолгого TextField вы можете указать объект-слушатель с анонимным внутренним классом.

Вот частный класс, который я написал для моего слушателя фокуса:

private class FocusPropertyChangeListener implements ChangeListener<Boolean> {

    FocusPropertyChangeListener() { System.out.println("New FPCL instance"); }

    @Override
    public void changed(ObservableValue<? extends Boolean> ov, 
        Boolean oldb, Boolean newb) {
        System.out.println("Focus change triggered");

        if (ancEncEditor.isVisible() && !ancEncEditor.isDisabled()) {
            boolean b = (newb != null && newb.booleanValue() == true);
            System.out.println("txtDx focus change event triggered: DxAdd = " + b);

            if (b) { btnDxAdd.setDefaultButton(true); }
            else { btnWindowCommit.setDefaultButton(true); }
            btnWindowCommit.setCancelButton(true);
            btnDxAdd.setDefaultButton(b);
        }
    }
}