例1:在窗口的标题栏显示当前时间,1秒更新一次时间
1 import java.text.DateFormat;
2 import java.text.SimpleDateFormat;
3 import java.util.Date;
4
5 import javafx.animation.KeyFrame;
6 import javafx.animation.Timeline;
7 import javafx.application.Application;
8 import javafx.event.ActionEvent;
9 import javafx.event.EventHandler;
10 import javafx.geometry.Insets;
11 import javafx.scene.Scene;
12 import javafx.scene.layout.GridPane;
13 import javafx.stage.Stage;
14 import javafx.util.Duration;
15
16 public class Main extends Application {
17
18 public static void main(String[] args) {
19 launch(args);
20 }
21
22 @Override
23 public void start(Stage primaryStage) throws Exception {
24 // Create a pane to hold two players
25 GridPane pane = new GridPane();
26 pane.setStyle("-fx-border-color: green;");
27 pane.setPadding(new Insets(10, 10, 10, 10));
28 pane.setHgap(10);
29 pane.setVgap(10);
30
31 // Date format
32 DateFormat df = new SimpleDateFormat("yyyy.MM.dd hh:mm:ss");
33
34 EventHandler<ActionEvent> eventHandler = e -> {
35 primaryStage.setTitle(df.format(new Date()));
36 System.out.println(df.format(new Date()));
37 };
38
39 Timeline animation = new Timeline(new KeyFrame(Duration.millis(1000), eventHandler));
40 animation.setCycleCount(Timeline.INDEFINITE);
41 animation.play();
42
43 // Create a scene
44 Scene scene = new Scene(pane, 400, 200);
45 primaryStage.setScene(scene);
46 primaryStage.setTitle("Starting");
47 primaryStage.setResizable(false);
48 primaryStage.show();
49 }
50 }
运行效果:
关于lambda表达式:https://www.cnblogs.com/franson-2016/p/5593080.html
例1中的第34~37行的代码是lambda表达式的写法(感觉lambda表达式好难理解)。在这里,其实就是将一个匿名内部类的引用赋给一个变量。
EventHandler<ActionEvent> eventHandler = e -> {
primaryStage.setTitle(df.format(new Date()));
System.out.println(df.format(new Date()));
};
以上代码等同于:
EventHandler<ActionEvent> eventHandler = new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
primaryStage.setTitle(df.format(new Date()));
System.out.println(df.format(new Date()));
}
};
例1中的第34~39行的代码可以改写成:
Timeline animation = new Timeline(new KeyFrame(Duration.millis(1000), new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
primaryStage.setTitle(df.format(new Date()));
System.out.println(df.format(new Date()));
}
}));