Java 如何使文本字段在单击按钮后可编辑10秒钟?

Java 如何使文本字段在单击按钮后可编辑10秒钟?,java,javafx,java-8,javafx-8,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); } }); spinBtn.se

使用JavaFX,单击一个按钮,我想执行以下操作:

spinBtn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
    field.setDisable(false);
    //Delay for 10 seconds
    field.setDisable(true);         
    }
});
spinBtn.setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent事件){
字段设置禁用(false);
//延迟10秒
字段设置禁用(true);
}
});
我很快意识到睡眠是不起作用的,因为它会完全冻结GUI。我也尝试过通过休眠线程来获取计时器,但如果输入需要延迟,GUI仍然会冻结。(下面的例子)

spinBtn.setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent事件){
ExampleTimerThread ExampleSeepythread=新ExampleTimerThread();//这扩展了线程
例如sleepythread.start();
//线程睡眠10秒&睡眠后设置公共静态布尔值finished=true
while(finished==true){
字段设置禁用(false);
}           
}
});
我可以做些什么来防止这段代码冻结GUI?
我知道秋千上有计时器。JavaFX中是否有类似的功能?

使用
PauseTransition
延迟事件:

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

你可以尝试
Platform.runLater
,在10秒后从线程中调用主线程中的一个函数,该函数现在禁用了文本字段。我认为这可以很好地工作,但从我的尝试来看,它给我带来了问题,我认为必须有一种不同的、更简单的方法(在我看来)像MBec的答案。我同意,MBec的答案似乎更合适。我想补充一点,我相信setDisable是JavaFX的正确语法。当我尝试使用setDisabled时,它给了我一个错误。我试图编辑它,但更改的字符太少。您遇到了什么类型的错误?或者最好问另一个问题。错误是“类型节点中的方法setDisabled(boolean)不可见”。我把它全部改成了setDisable,它成功了。很抱歉,我意识到我原来的问题是不正确的。我修好了。
spinBtn.setOnAction(e -> {
    field.setDisabled(false);
    PauseTransition pt = new PauseTransition(Duration.seconds(10));
    pt.setOnFinished(ev -> {
        field.setDisabled(true);
    });
    pt.play();
});