JavaFX实时时间和日期

我正在构建一个使用JavaFx的应用程序,它具有一个额外的function,可以在场景的顶角显示当前的日期和时间。 由于我是JavaFX的新手,我不知道如何实现这个。

我尝试在swing中使用旧代码,但是我遇到了IllegalStateException错误。

这是我的代码。

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

      

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

正如您所注意到的,我测试了它在控制台中打印实时时间。 是的,它有效,但标签仍然是静态的。

我认为你需要FX UI Thread Platform.runLater(...) ,但你可以在控制器类中使用Timeline做这样的事情,

 @FXML public void initialize() { Timeline clock = new Timeline(new KeyFrame(Duration.ZERO, e -> { second = LocalDateTime.now().getSecond(); minute = LocalDateTime.now().getMinute(); hour = LocalDateTime.now().getHour(); time.setText(hour + ":" + (minute) + ":" + second); }), new KeyFrame(Duration.seconds(1)) ); clock.setCycleCount(Animation.INDEFINITE); clock.play(); } 

我有一个简单的方法,它可以帮助你

 private JFXDatePicker txtDateVenteAV; txtDateVenteAV.setValue(LocalDate.now());