JavaFX/Controlsfx - Как отслеживать изменение элемента в PropertySheet?

Есть ли удобный способ отслеживать статус элемента списка свойств? Например, текстовое поле получает фокус, логическое изменение статуса и т. д.

Я просмотрел javadoc, не нашел.

И здесь есть проблема, но решение, похоже, сообщает редактору об изменении свойства.

Я хочу как раз наоборот, следить за редактором.

Кто-нибудь может помочь?


person user6839234    schedule 19.03.2017    source источник


Ответы (1)


Из таблицы свойств:

/**
 * Sets a new editor factory used by the PropertySheet to determine which
 * {@link PropertyEditor} to use for a given {@link Item}.
 * @param factory 
 */
public final void setPropertyEditorFactory( Callback<Item, PropertyEditor<?>> factory ) {
    propertyEditorFactory.set( factory == null? new DefaultPropertyEditorFactory(): factory );
}

Если вы создаете обратный вызов для PropertyEditor, вы можете добавить слушателей в редактор.

Например:

    SimpleObjectProperty<Callback<PropertySheet.Item, PropertyEditor<?>>> propertyEditorFactory = new SimpleObjectProperty<>(this, "propertyEditor", new DefaultPropertyEditorFactory());
    projectSheet.setPropertyEditorFactory(getItemPropertyEditorCallback(propertyEditorFactory));



private Callback<PropertySheet.Item, PropertyEditor<?>> getItemPropertyEditorCallback(SimpleObjectProperty<Callback<PropertySheet.Item, PropertyEditor<?>>> propertyEditorFactory) {
    return param -> {
        PropertyEditor<?> editor = propertyEditorFactory.get().call(param);

        //Add listeners to editor
        editor.getEditor().focusedProperty().addListener((observable, oldValue, newValue) -> System.out.println(newValue));

        return editor;
    };
}
person bonfatti    schedule 23.03.2017
comment
Спасибо. Я протестировал пример кода, но у меня не работает. Я не понимаю PropertyItemBase, это не может быть PropertySheet.Item, верно? Потому что в его методах нет метода setEditor(). Итак, что это? @бонфатти - person user6839234; 25.03.2017
comment
Я хотел удалить часть кода itemBase, прежде чем вставлять в нее свой комментарий, извините за это. PropertyItemBase — это реализация PropertySheet.Item, содержащая экземпляр редактора, а также методы получения и установки. Я отредактирую свой ответ, чтобы удалить itemBase. - person bonfatti; 26.03.2017