in kit/src/main/java/com/oracle/javafx/scenebuilder/kit/editor/panel/inspector/editors/BoundedDoubleEditor.java [104:187]
private void initialize() {
root = EditorUtils.loadFxml("BoundedDoubleEditor.fxml", this); //NOI18N
//
// Text field
//
EventHandler<ActionEvent> onActionListener = event -> {
if (isHandlingError()) {
// Event received because of focus lost due to error dialog
return;
}
if (isUpdateFromModel() || updateFromSlider) {
// nothing to do
return;
}
Object value = getValue();
if (getPropertyMeta() != null) {
if ((value == null)
|| !((DoublePropertyMetadata) getPropertyMeta()).isValidValue((Double) value)) {
handleInvalidValue(getTextField().getText());
}
}
assert value instanceof Double;
double valDouble = (Double) value;
// Check if the entered value is a constant string
boolean isConstant = constants.get(getTextField().getText().toUpperCase(Locale.ROOT)) != null;
// Check if the entered value is a constant value
for (Map.Entry<String, Object> entry : constants.entrySet()) {
if (value.equals(entry.getValue())) {
isConstant = true;
break;
}
}
// If the value is not a constant,
// and is less than the minimum, or more than the maximum,
// set the value to min or max
if (!minMaxForSliderOnly && !isConstant && (valDouble < min || valDouble > max)) {
if (valDouble < min) {
valDouble = min;
} else if (valDouble > max) {
valDouble = max;
}
getTextField().setText(EditorUtils.valAsStr(valDouble));
}
getTextField().selectAll();
updateFromTextField = true;
slider.setValue(valDouble);
updateFromTextField = false;
userUpdateValueProperty(valDouble);
};
setNumericEditorBehavior(this, getTextField(), onActionListener, false);
//
// Slider
//
configureSlider(getPropertyMeta());
slider.valueProperty().addListener((InvalidationListener) valueModel -> {
// System.out.println("Slider : valueProperty changed!");
if (isUpdateFromModel() || updateFromTextField) {
// nothing to do
return;
}
// Slider button moved or left/right key typed.
// In this case, we want to round the value,
// since the Slider may returns many decimals.
double value = EditorUtils.round(slider.getValue(), roundingFactor);
updateFromSlider = true;
getTextField().setText(EditorUtils.valAsStr(value));
updateFromSlider = false;
userUpdateTransientValueProperty(value);
});
slider.pressedProperty().addListener((InvalidationListener) valueModel -> {
if (!slider.isPressed()) {
double value = EditorUtils.round(slider.getValue(), roundingFactor);
userUpdateValueProperty(value);
}
});
// Add the AutoSuggest text field in the scene graph
textSp.getChildren().add(super.getRoot());
}