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
0
A
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.