2017-10-13 4 views
0

버튼이있는 그리드가 있습니다. 1 - 3 개의 버튼이 그리드에서 무작위로 활성화되고 3 초 후에 활성화되는 버튼을 닫으려고합니다. 타임 라인을 사용하려고했지만 버튼을 하나만 닫았습니다. 어떤 생각?3 초 후에 버튼 닫기 javafx

답변

0

"... 닫기 버튼 ..."이란 정확히 무엇을 의미합니까? 그것은 당신이 같은 간단한 클래스를 사용하여 특정 지연 후 그것을 할 수 있다는 것을 의미 무엇이든 어쨌든

: 당신의 버튼을 얻을 때

private class DelayedTrigger extends Task<Void> { 

    private final long delay; 
    private Runnable onTriggered; 

    public DelayedTrigger(long delay, Runnable onTriggered) { 
     this.delay = delay; 
     this.onTriggered = onTriggered; 
    } 

    @Override 
    protected Void call() throws Exception { 
     try { 
      Thread.sleep(delay); 
     } catch (Exception e) { 
     } 
     return null; 
    } 

    @Override 
    protected void succeeded() { 
     if (onTriggered != null) { 
      onTriggered.run(); 
     } 
    } 

그런 다음, "활성화"를 방금 :

DelayedTrigger activeTrigger = new DelayedTrigger(3000,() -> myActivatedButton.close()); 
    new Thread(activeTrigger).start(); 

그리고 나중에 마음이 바뀌면 (예 : 2 초 후에 발생하는 일정 때문에) 방아쇠를 취소 할 수 있습니다.

activeTrigger.cancel(); 

아마도 더 좋은 (내장 된) 해결책이있을 것입니다.하지만 이것은 제가 사용하는 것입니다.