import javafx.application.Application; import javafx.beans.property.LongProperty; import javafx.beans.property.SimpleLongProperty; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.TextField; import javafx.scene.layout.HBox; import javafx.scene.layout.VBox; import javafx.stage.Stage; import javafx.util.converter.NumberStringConverter; public class InteractFX extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage stage) throws Exception { TextField input = new TextField("0"){ // only accept numbers as input @Override public void replaceText(int start, int end, String text) { if (text.matches("[0-9]*")) { super.replaceText(start, end, text); } } // only accept numbers on copy+paste @Override public void replaceSelection(String text) { if (text.matches("[0-9]*")) { super.replaceSelection(text); } } }; // when the textfield is empty, replace text with "0" input.textProperty().addListener((observable, oldValue, newValue)->{ if(newValue == null || newValue.trim().isEmpty()){ input.setText("0"); } }); // get a bi-directional bound long-property of the input value LongProperty inputValue = new SimpleLongProperty(); input.textProperty().bindBidirectional(inputValue, new NumberStringConverter()); // textfield is disabled when the current value is other than "0" input.disableProperty().bind(inputValue.isNotEqualTo(0)); Button increment = new Button("Increment"); increment.setOnAction(event-> inputValue.set(inputValue.get() + 1)); // incr-button is disabled when input is >= 10 increment.disableProperty().bind(inputValue.greaterThanOrEqualTo(10)); Button decrement = new Button("Decrement"); decrement.setOnAction(event-> inputValue.set(inputValue.get() - 1)); // decrement button is disabled when input is <=0 decrement.disableProperty().bind(inputValue.lessThanOrEqualTo(0)); // layout VBox root = new VBox(); root.getChildren().add(input); HBox buttons = new HBox(); buttons.getChildren().addAll(increment,decrement); root.getChildren().add(buttons); stage.setScene(new Scene(root)); stage.sizeToScene(); stage.show(); } }