27 lines
1.5 KiB
Markdown
27 lines
1.5 KiB
Markdown
# Bounded integer inputs
|
|
|
|
`de.neitzel.fx.control.IntegerSpinners.nonNegative(min, max, value)` creates an
|
|
editable JavaFX spinner with inclusive nonnegative bounds. Construct and use it
|
|
on the JavaFX application thread.
|
|
|
|
Every valid typed number immediately updates the value property, so a form can
|
|
save its model without waiting for Enter or a focus change. Non-digit input and
|
|
values above the maximum are rejected. Empty input and intermediate numbers
|
|
below the minimum retain the last committed value and revert when focus leaves
|
|
the editor. Increment/decrement use the normal JavaFX spinner behavior.
|
|
|
|
The factory rejects negative/inverted bounds and out-of-range initial values.
|
|
Applications own their field labels, units, and domain-specific bounds.
|
|
|
|
|
|
Create and add a spinner in a controller's `initialize` method or in `Application.start`:
|
|
|
|
```java
|
|
Spinner<Integer> quantity = IntegerSpinners.nonNegative(0, 100, 1);
|
|
quantity.valueProperty().addListener((observable, oldValue, newValue) ->
|
|
System.out.println("Quantity: " + newValue));
|
|
container.getChildren().add(quantity);
|
|
```
|
|
|
|
Import `javafx.scene.control.Spinner` and `de.neitzel.fx.control.IntegerSpinners`; `container` is your Pane. Read `quantity.getValue()` to obtain the committed number. Set a programmatic value through `quantity.getValueFactory().setValue(...)`. Use the factory's bounds as UI constraints and keep independent business validation where the value is saved. The helper does not add an FXML binding declaration or create a Model Attribute automatically.
|