Search code examples
javafx-2

JavaFX: How to disable a button for a specific amount of time?


I want to disable a button for a specific time in JavaFX application. Is there any option to do this? If not, is there any work around for this?

Below is my code in application. I tried Thread.sleep, but i know this is not the good way to stop the user from clicking on next button.

nextButton.setDisable(true);
final Timeline animation = new Timeline(
        new KeyFrame(Duration.seconds(delayTime),
        new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent actionEvent) {
                nextButton.setDisable(false);
            }
        }));
animation.setCycleCount(1);
animation.play();

Solution

  • You could use the simple approach of a thread that provides the relevant GUI calls (through runLater() of course):

    new Thread() {
        public void run() {
            Platform.runLater(new Runnable() {
                public void run() {
                    myButton.setDisable(true);
                }
            }
            try {
                Thread.sleep(5000); //5 seconds, obviously replace with your chosen time
            }
            catch(InterruptedException ex) {
            }
            Platform.runLater(new Runnable() {
                public void run() {
                    myButton.setDisable(false);
                }
            }
        }
    }.start();
    

    It's perhaps not the neatest way of achieving it, but works safely.