2017-10-13 45 views
0

我有一个带按钮的网格。 1到3个按钮在我的网格中随机激活,我试图关闭3秒后激活的按钮。 我尝试使用时间线,但它只关闭1个按钮。任何想法 ?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(); 

可能会有一些更好的(内置)解决方案,但这是我使用的。