2017-10-13 6 views
0

J'ai une grille avec des boutons. Les boutons 1 à 3 sont activés de façon aléatoire dans ma grille et j'essaie de fermer les boutons qui sont activés, après 3 secondes. J'ai essayé d'utiliser une timeline mais elle n'a fermé qu'un seul bouton. Une idée ? Qu'entendez-vous exactement par "... close buttons ..."?Boutons de fermeture après 3 secondes javafx

Répondre

0

Quoi qu'il en soit, tout cela signifie que vous pouvez le faire après un certain délai en utilisant une classe simple comme:

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(); 
     } 
    } 

Ensuite, lorsque le bouton devient "activé", vous venez:

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

Et si vous changez d'avis plus tard (par exemple, en raison d'un événement qui survient après 2 secondes), vous pouvez toujours annuler le déclencheur en appelant:

activeTrigger.cancel(); 

Il y aura probablement une meilleure solution (intégrée) mais c'est ce que j'utilise.