Comment mettre à jour l'étiquette de la boîte toutes les 2 secondes en java fx?
Je suis en train de simuler une base de thermostat dans une application GUI.
Je veux mettre à jour l'étiquette de la boîte de valeur toutes les 2 secondes avec la nouvelle valeur de température.
Par exemple, mon intial de la température sera affichée en tant que 68 degrés et mis à jour à 69, 70, etc. jusqu'à 75 toutes les 2 secondes.
C'est un morceau de code que j'ai écrit en Java fx. controlpanel
objet est de te former d'où l'étiquette de la boîte est présent. Il met à jour uniquement la valeur finale 75. Il n'est pas mis à jour toutes les 2 secondes. J'ai écrit une méthode de pause pour cause de 2 secondes de retard. Toutes les étiquettes sont mises à jour avec leurs valeurs finales mais pas mis à jour toutes les 2 secondes. Quand je debug, je vois que les valeurs sont augmentées par une toutes les 2 secondes. Ce code est écrit dans le bouton de l'événement onClick
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
int i=0;
Timer asd = new Timer(1000,null);
asd.setDelay(1000);
while(i < 10)
{
jTextField1.setText(Integer.toString(i));
i++;
asd.start();
}
}
pensé que si il y avait une solution pour ce problème dans framework swing va m'aider à mettre en œuvre en javafx
Dans Swing vous pouvez utiliser une
javax.swing.Timer
.it updates only at last
, rien aider somhow dans ce contexte, est une raison de poster un SSCCE, bref, runnble, compilable, autrement, cette question n'est pas de répondre à tous lesje n'ai pas de problème avec un timer - évidemment, vous ne ont un problème avec exactement la minuterie, en ne sachant pas comment l'utiliser 😉 Lire la doc api ... (conseil: prend ton temps ne fait rien)
OriginalL'auteur user1364861 | 2013-04-21
Vous devez vous connecter pour publier un commentaire.
À résoudre votre tâche à l'aide de la Minuterie vous avez besoin pour mettre en œuvre
TimerTask
avec votre code et l'utilisationTimer#scheduleAtFixedRate
méthode pour exécuter ce code à plusieurs reprises:Également noter que l'appel à une INTERFACE utilisateur les opérations doivent être effectuées sur Swing thread d'INTERFACE utilisateur (ou FX thread de l'INTERFACE utilisateur si vous utilisez JavaFX):
En cas de JavaFX vous devez mettre à jour les commandes d'effet sur "FX thread d'INTERFACE utilisateur" au lieu de Balancer un. Pour atteindre cet usage
javafx.application.Platform#runLater
méthode au lieu deSwingUtilities
timer.cancel()
OriginalL'auteur Sergey Grinev
Voici une autre solution qui utilise un JavaFX Chronologie d'animation au lieu d'une Minuterie.
J'aime cette solution car l'animation cadre fait en sorte que tout se passe sur le JavaFX application thread, vous n'avez pas à vous soucier des problèmes de threading.
La solution est basée sur le compte à rebours de la solution à partir de: JavaFX: Comment lier deux valeurs?
OriginalL'auteur jewelsea
Appel
Platform.runLater
fonctionné pour moi:OriginalL'auteur Pixel