2017-12-04 13 views
4

는 버튼 클릭에 나는이 작업을 수행 할 수 : 나는 빨리 완전히 GUI를 정지로 수면이 작동하지 않을 것을 깨달았다버튼을 클릭 할 때 10 초 동안 텍스트 필드를 편집 가능하게 만들려면 어떻게해야합니까? 자바 FX를 사용

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