JavaFX Vivre l'Heure et la Date
Je fais construire actuellement une application à l'aide de JavaFx avec une fonction supplémentaire qui affiche la date et l'heure dans le coin de la scène. Depuis, je suis nouveau sur JavaFX, je ne sais pas comment la mettre celui-ci.
J'ai essayé d'utiliser un vieux code de swing, mais j'ai eu une IllegalStateException Erreur.
Voici mon code.
MainMenuController.java
@FXML private Label time;
private int minute;
private int hour;
private int second;
@FXML
public void initialize() {
Thread clock = new Thread() {
public void run() {
for (;;) {
DateFormat dateFormat = new SimpleDateFormat("hh:mm a");
Calendar cal = Calendar.getInstance();
second = cal.get(Calendar.SECOND);
minute = cal.get(Calendar.MINUTE);
hour = cal.get(Calendar.HOUR);
//System.out.println(hour + ":" + (minute) + ":" + second);
time.setText(hour + ":" + (minute) + ":" + second);
try {
sleep(1000);
} catch (InterruptedException ex) {
//...
}
}
}
};
clock.start();
}
MainMenu.fxml
<children>
<Label fx:id="time" textFill="WHITE">
<font>
<Font name="Segoe UI Black" size="27.0" />
</font>
</Label>
<Label fx:id="date" textFill="WHITE">
<font>
<Font name="Segoe UI Semibold" size="19.0" />
</font>
</Label>
</children>
Main.java
public class Main extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("view/MainMenu.fxml"));
primaryStage.setScene(new Scene(root,1366, 768));
primaryStage.show();
}
}
Comme vous le remarquez, je l'ai testé l'impression de l'heure en direct dans la console. Ouais, il a travaillé, mais l'étiquette est toujours statique.
Remarque: si vous utilisez Java SE 8 (ou plus), il est recommandé d'utiliser la nouvelle Date & de l'API du Temps lorsque c'est possible.
Double Possible de: JavaFX l'Affichage de l'Heure et de l'Actualiser à Chaque Seconde
Double Possible de: JavaFX l'Affichage de l'Heure et de l'Actualiser à Chaque Seconde
OriginalL'auteur Bryan Reyes | 2017-02-22
Vous devez vous connecter pour publier un commentaire.
Je pense que vous avez besoin FX Thread d'INTERFACE utilisateur
Platform.runLater(...)
pour cela, mais vous pouvez faire quelque chose comme ceci en utilisantScénario
à vous de contrôleur de classe,Yep, bonne chance!
Note qu'un calendrier de mise à jour à chaque seconde a le potentiel pour être n'importe quoi, jusqu'à une seconde derrière le temps réel. À l'aide d'un
AnimationTimer
va être aussi précis que l'INTERFACE de rendu permet. C'est probablement aussi le nettoyant à utiliserLocalTime
et unDateTimeFormatter
au lieu de l'héritageCalendar
classe.OriginalL'auteur Shekhar Rai
L' @Shekhar Rai réponse fonctionne bien, mais ici, c'est une version plus courte qui fonctionne très bien aussi.
Le principal avantage est que vous n'avez pas à définir toutes les variables (secondes, minutes, ...)
OriginalL'auteur WEGSY85
j'ai une méthode simple, il peut vous aide à
OriginalL'auteur Samer