/** * Attaches a ChangeListener to the ObservableValue, and also stores their relationship. * <p> * Knowledge of their relationship is used when this PropertyEditor.Item is * removed from the PropertySheet, to detach the listeners again. This will avoid * memory leaks, as listeners otherwise prevent the observable from being garbage * collected. * * @param <T> type of the ObservableValue and the ChangeListener * @param observable the ObservableValue * @param listener the ChangeListener */ protected final <T> void attachListener(ObservableValue<T> observable, ChangeListener<T> listener) { @SuppressWarnings("unchecked") final ObservableValue<Object> key = (ObservableValue<Object>) observable; @SuppressWarnings("unchecked") final ChangeListener<Object> value = (ChangeListener<Object>) listener; listeners.put(key, value); observable.addListener(listener); } }
private <T> void registerListener(ObservableValue<T> value, ChangeListener<Object> listener) { ChangeListener<Object> previous = registeredListeners.put(value, listener); if (previous != null) { value.removeListener(previous); } value.addListener(listener); }
public static <T> InvalidationListener addDelayedPropertyInvalidationListener(ObservableValue<T> property, Duration delayTime, Consumer<T> justInTimeConsumer, Consumer<T> delayedConsumer) { Wrapper<T> eventWrapper = new Wrapper<>(); PauseTransition holdTimer = new PauseTransition(delayTime); holdTimer.setOnFinished(event -> delayedConsumer.accept(eventWrapper.content)); final InvalidationListener invalidationListener = observable -> { eventWrapper.content = property.getValue(); justInTimeConsumer.accept(eventWrapper.content); holdTimer.playFromStart(); }; property.addListener(invalidationListener); return invalidationListener; }
public static <T> InvalidationListener addDelayedPropertyInvalidationListener(ObservableValue<T> property, Duration delayTime, Consumer<T> consumer) { Wrapper<T> eventWrapper = new Wrapper<>(); PauseTransition holdTimer = new PauseTransition(delayTime); holdTimer.setOnFinished(event -> consumer.accept(eventWrapper.content)); final InvalidationListener invalidationListener = observable -> { eventWrapper.content = property.getValue(); holdTimer.playFromStart(); }; property.addListener(invalidationListener); return invalidationListener; }
public FlatMapBindingBase(ObservableValue<T> src, Function<? super T, O> f) { this.src = src; this.mapper = f; src.addListener(weakSrcListener); }
@SafeVarargs public FirstNonNullBinding(ObservableValue<? extends T>... chain) { this.chain = chain; for(int i = 0; i < chain.length; ++i) { chain[i].addListener(weakListener); } }
@Override public void connect(T baseVal) { if(isConnected()) { throw new IllegalStateException("Already connected"); } observable = selector.apply(baseVal); observable.addListener(observableInvalidationListener); }
@Override public void connect(T baseVal) { if(isConnected()) { throw new IllegalStateException("Already connected"); } observable = selector.apply(baseVal); observable.addListener(observableInvalidationListener); }
@Override public void addListener(ChangeListener<? super T> listener) { if (listener instanceof UIThreadAware) { getDelegate().addListener(listener); } else { getDelegate().addListener(new UIThreadAwareChangeListener<>(listener)); } }
@Nonnull @SuppressWarnings("unchecked") private ListenerSubscription createChangeListener(@Nonnull final E element, @Nonnull final ObservableValue<?> observable) { final ChangeListener listener = (value, oldValue, newValue) -> fireChange(changeFor(element)); observable.addListener(listener); return () -> observable.removeListener(listener); }
/** * Binds a topic to a property such that a message is sent whenever the observable-value changes. * * @param topicToBind the topic to bind to the observable value. * @param observableValue the value which is to trigger sending message. */ default <T> void bindTopic(Topic<T> topicToBind, ObservableValue<T> observableValue) { observableValue.addListener((observable) -> submitMessage(topicToBind, observableValue.getValue())); }
public ListCombinationBinding( ObservableList<? extends ObservableValue<? extends T>> list, Function<? super Stream<T>, ? extends U> f) { source = list; combiner = f; source.addListener(weakListListener); source.forEach(elem -> elem.addListener(weakElemListener)); }
@Override protected Subscription subscribeToInputs() { ChangeListener<T> listener = (obs, old, val) -> { if(val != null) { emit(val); } }; observable.addListener(listener); return () -> observable.removeListener(listener); }
private void sourceChanged( Change<? extends ObservableValue<? extends T>> ch) { while(ch.next()) { ch.getRemoved().forEach(elem -> elem.removeListener(weakElemListener)); ch.getAddedSubList().forEach(elem -> elem.addListener(weakElemListener)); invalidate(); } }
public static <T> Observable<Optional<T>> fromNullableObservableValue(final ObservableValue<T> fxObservable) { return Observable.create((ObservableEmitter<Optional<T>> emitter) -> { emitter.onNext(Optional.ofNullable(fxObservable.getValue())); final ChangeListener<T> listener = (observableValue, prev, current) -> emitter.onNext(Optional.ofNullable(current)); fxObservable.addListener(listener); emitter.setDisposable(JavaFxSubscriptions.unsubscribeInEventDispatchThread(() -> fxObservable.removeListener(listener))); }); }
/** * Create a new window */ public NativeDecoratedTrimmedWindow() { this.trimPane = new BorderPane(); setCenter(this.trimPane); Util.windowProperty(this).addListener((o, oldV, newV) -> { this.w = (Stage) newV; updateWindow(); }); }
public static <T> Observable<Optional<T>> fromNullableObservableValue(final ObservableValue<T> fxObservable) { return Observable.create((ObservableEmitter<Optional<T>> emitter) -> { emitter.onNext(Optional.ofNullable(fxObservable.getValue())); final ChangeListener<T> listener = (observableValue, prev, current) -> emitter.onNext(Optional.ofNullable(current)); fxObservable.addListener(listener); emitter.setDisposable(JavaFxSubscriptions.unsubscribeInEventDispatchThread(() -> fxObservable.removeListener(listener))); }); }
public static <T> Observable<Change<T>> fromObservableValueChanges(final ObservableValue<T> fxObservable) { return Observable.create((ObservableEmitter<Change<T>> emitter) -> { final ChangeListener<T> listener = (observableValue, prev, current) -> { if (current != null) emitter.onNext(new Change<>(prev,current)); }; fxObservable.addListener(listener); emitter.setDisposable(JavaFxSubscriptions.unsubscribeInEventDispatchThread(() -> fxObservable.removeListener(listener))); }); }
public static <T> Observable<T> fromObservableValue(final ObservableValue<T> fxObservable) { return Observable.create((ObservableEmitter<T> emitter) -> { if (fxObservable.getValue() != null) emitter.onNext(fxObservable.getValue()); final ChangeListener<T> listener = (observableValue, prev, current) -> { if (current != null) emitter.onNext(current); }; fxObservable.addListener(listener); emitter.setDisposable(JavaFxSubscriptions.unsubscribeInEventDispatchThread(() -> fxObservable.removeListener(listener))); }); }
public static <T> Observable<T> fromObservableValue(final ObservableValue<T> fxObservable) { return Observable.create((ObservableEmitter<T> emitter) -> { if (fxObservable.getValue() != null) emitter.onNext(fxObservable.getValue()); final ChangeListener<T> listener = (observableValue, prev, current) -> { if (current != null) emitter.onNext(current); }; fxObservable.addListener(listener); emitter.setDisposable(JavaFxSubscriptions.unsubscribeInEventDispatchThread(() -> fxObservable.removeListener(listener))); }); }