2017-12-04 8 views
4

は、ボタンのクリック時に、私はこれをしたい:私はすぐにそれが完全にGUIをフリーズすると睡眠が動作しないことに気づいボタンをクリックして10秒間テキストフィールドを編集できるようにするにはどうすればよいですか? JavaFXのを使用して

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

。私もタイマーを得るためにスリープスレッドを試してきましたが、入力が遅れたい場所であればGUIがフリーズします。 (下記の例)

このコードがGUIをフリーズさせないようにするにはどうすればよいですか? 私はスイングで知っている、タイマーがあります。 JavaFXに類似したものはありますか?イベントを遅らせる

+1

あなたは10秒後にスレッドから 'Platform.runLater'を試してみて、今でテキストフィールドを無効にし、メインスレッドで関数を呼び出すことができます。 – Philipp

+0

私はそれがうまくいくと思うが、私が試したことから問題が出てきて、私はMBecの答えのように(私の意見では)別の、より単純な方法がなければならないと考えた。 – Lalenci

+0

私は同意する、MBecの答えははるかに適しているようだ。 – Philipp

答えて

8

使用PauseTransition

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

素晴らしいです、ありがとう!これは完全に機能します。 – Lalenci

+0

私が追加したいのは、私はsetDisableがJavaFXの正しい構文だと信じています。 setDisabledを使用しようとしたときにエラーが発生しました。私はそれを編集しようとしましたが、文字数が少なすぎます。 – Lalenci

+0

どのようなエラーが発生しましたか?あるいは、別の質問をするのが良いでしょう。 – MBec

関連する問題