如何通过单击按钮使文本字段可编辑10秒?

时间:2017-12-04 08:28:53

标签: java javafx java-8 javafx-8

使用JavaFX,点击按钮我想这样做:

spinBtn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
    field.setDisable(false);
    //Delay for 10 seconds
    field.setDisable(true);         
    }
});

我很快意识到睡眠不会起作用,因为它完全冻结了GUI。我也尝试过睡眠线程来获取一个计时器,但是如果输入我希望延迟,它仍会冻结GUI。 (以下示例)

spinBtn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
    ExampleTimerThread exampleSleepyThread = new ExampleTimerThread();//this extends Thread
    exampleSleepyThread.start(); 
//thread sleeps for 10 secs & sets public static boolean finished = true; after sleep 
    while(finished == true){
        field.setDisable(false);
        }           
    }
});

如何防止此代码冻结GUI? 我知道在Swing中,有一个计时器。 JavaFX中有类似的内容吗?

1 个答案:

答案 0 :(得分:8)

使用PauseTransition延迟事件:

spinBtn.setOnAction(e -> {
    field.setDisabled(false);
    PauseTransition pt = new PauseTransition(Duration.seconds(10));
    pt.setOnFinished(ev -> {
        field.setDisabled(true);
    });
    pt.play();
});