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); }
/** * 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); } }
public void applyOpenValues() { target.setValue(getOpenValueSupplier().get()); }
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; }
private boolean usePromptText() { Object txt = valueProperty.getValue(); txt = validateComboBox(txt); String promptTxt = promptTextProperty.getValue(); boolean isLabelFloat = control.isLabelFloat(); return isLabelFloat || (promptTxt != null && (txt == null || txt.toString().isEmpty()) && !promptTxt.isEmpty() && !promptTextFill.get().equals(Color.TRANSPARENT)); }
public void shutdown() { registeredListeners.entrySet().stream() .filter(e -> e.getKey() != null) .forEach(e -> e.getKey().removeListener(e.getValue())); }
public void applyEndValues() { for (JFXKeyValue keyValue : keyValues) { if (keyValue.isValid()) { final WritableValue target = keyValue.getTarget(); if (target != null) { final Object endValue = keyValue.getEndValue(); if (endValue != null && !target.getValue().equals(endValue)) { target.setValue(endValue); } } } } }
@Override public void initialize(URL location, ResourceBundle resources) { languageChoiceBox.getItems().addAll(DesignerUtil.getSupportedLanguageVersions() .stream() .map(LanguageVersion::getLanguage) .distinct() .collect(Collectors.toList())); languageChoiceBox.setConverter(new StringConverter<Language>() { @Override public String toString(Language object) { return object.getTerseName(); } @Override public Language fromString(String string) { return LanguageRegistry.findLanguageByTerseName(string); } }); languageChoiceBox.getSelectionModel().select(LanguageRegistry.getDefaultLanguage()); exportResultArea.setSyntaxHighlighter(new XmlSyntaxHighlighter()); registerListener(nameField.textProperty(), updateResultListener()); registerListener(messageField.textProperty(), updateResultListener()); registerListener(descriptionField.textProperty(), updateResultListener()); registerListener(prioritySlider.valueProperty(), updateResultListener()); registerListener(languageChoiceBox.getSelectionModel().selectedItemProperty(), updateResultListener()); registerListener(xpathExpression, updateResultListener()); updateResultListener().changed(null, null, null); }
void reverse(double now) { currentDuration = duration - (currentDuration - now); // update initial values for (JFXKeyValue keyValue : keyValues) { final WritableValue target = keyValue.getTarget(); if (target != null) { initialValuesMap.put(target, target.getValue()); endValuesMap.put(target, keyValue.getEndValue()); } } }
private void updateTextPos() { double textWidth = textNode.getLayoutBounds().getWidth(); final double promptWidth = promptText == null ? 0 : promptText.getLayoutBounds().getWidth(); switch (getHAlignment()) { case CENTER: linesWrapper.promptTextScale.setPivotX(promptWidth / 2); double midPoint = textRight.get() / 2; double newX = midPoint - textWidth / 2; if (newX + textWidth <= textRight.get()) { textTranslateX.set(newX); } break; case LEFT: linesWrapper.promptTextScale.setPivotX(0); break; case RIGHT: linesWrapper.promptTextScale.setPivotX(promptWidth); break; } }
@Override protected Node createUndecoratedEditor() { //TODO: CustomValue should be bound to defaultValue until we disable auto for the first time final HBox container = new HBox(); final TextInputControl textInput = getInputControl(); final CheckBox auto = new CheckBox("Auto"); final boolean useDefaultValue = value.isEmpty().get() || value.get().equals(defaultValue.get()); textInput.disableProperty().bind(auto.selectedProperty()); if (useDefaultValue) { textInput.textProperty().bind(defaultValue); } else { textInput.setText(value.get()); } customValue.bind(textInput.textProperty()); attachListener(textInput.textProperty(), (ov, o, n) -> { if (n == null || n.isEmpty() || n.equalsIgnoreCase(defaultValue.getValue())) { value.setValue(null); } else { value.setValue(n); } }); auto.selectedProperty().setValue(useDefaultValue); attachListener(auto.selectedProperty(), (ov, o, isAuto) -> setTextFieldBehaviour(textInput, isAuto, defaultValue, customValue) ); HBox.setHgrow(textInput, Priority.ALWAYS); HBox.setHgrow(auto, Priority.NEVER); container.getChildren().addAll(auto, textInput); return container; }
private static void setSpinnerBehaviour( final IntegerSpinnerValueFactory svf, final boolean useDefaultValue, final ObservableIntegerValue defaultValue, final ObjectProperty<Integer> customValue ) { if (useDefaultValue) { svf.valueProperty().unbindBidirectional(customValue); svf.setValue(defaultValue.get()); } else { svf.setValue(customValue.getValue()); svf.valueProperty().bindBidirectional(customValue); } } }
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; }
private void updateLabelFloat(boolean animation) { if (control.isLabelFloat()) { if (control.isFocused()) { animateFloatingLabel(true, animation); } else { Object text = valueProperty.getValue(); text = validateComboBox(text); animateFloatingLabel(!(text == null || text.toString().isEmpty()), animation); } } }
public void animate(double now) { if (now <= currentDuration) { for (JFXKeyValue keyValue : keyValues) { if (keyValue.isValid()) { final WritableValue target = keyValue.getTarget(); final Object endValue = endValuesMap.get(target); if (endValue != null && target != null && !target.getValue().equals(endValue)) { target.setValue(keyValue.getInterpolator().interpolate(initialValuesMap.get(target), endValue, now / currentDuration)); } } } } else { if (!finished) { finished = true; for (JFXKeyValue keyValue : keyValues) { if (keyValue.isValid()) { final WritableValue target = keyValue.getTarget(); if (target != null) { // set updated end value instead of cached final Object endValue = keyValue.getEndValue(); if (endValue != null) { target.setValue(endValue); } } } } currentDuration = duration; } } }
public void applyCloseValues(){ target.setValue(getCloseValueSupplier().get()); }
public void init() { finished = false; for (JFXKeyValue keyValue : keyValues) { if (keyValue.getTarget() != null) { // replaced putIfAbsent for mobile compatibility if (!initialValuesMap.containsKey(keyValue.getTarget())) { initialValuesMap.put(keyValue.getTarget(), keyValue.getTarget().getValue()); } if (!endValuesMap.containsKey(keyValue.getTarget())) { endValuesMap.put(keyValue.getTarget(), keyValue.getEndValue()); } } } }
private void updateTextPos() { double textWidth = textNode.getLayoutBounds().getWidth(); final double promptWidth = promptText == null ? 0 : promptText.getLayoutBounds().getWidth(); switch (getHAlignment()) { case CENTER: linesWrapper.promptTextScale.setPivotX(promptWidth / 2); double midPoint = textRight.get() / 2; double newX = midPoint - textWidth / 2; if (newX + textWidth <= textRight.get()) { textTranslateX.set(newX); } break; case LEFT: linesWrapper.promptTextScale.setPivotX(0); break; case RIGHT: linesWrapper.promptTextScale.setPivotX(promptWidth); break; } }
private void unFocus() { focusTimer.stop(); scale.setX(initScale); focusedLine.setOpacity(0); if (control.isLabelFloat()) { animatedPromptTextFill.set(promptTextFill.get()); Object text = valueProperty.getValue(); text = validateComboBox(text); if (text == null || text.toString().isEmpty()) { animating = true; runTimer(unfocusTimer, true); } } }
xpathExpression.getValue() );