例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 @Override23 public void start(Stage primaryStage) throws Exception {24 // Create a pane to hold two players25 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 format32 DateFormat df = new SimpleDateFormat("yyyy.MM.dd hh:mm:ss");33 34 EventHandlereventHandler = 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 scene44 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表达式:
例1中的第34~37行的代码是lambda表达式的写法(感觉lambda表达式好难理解)。在这里,其实就是将一个匿名内部类的引用赋给一个变量。
EventHandlereventHandler = e -> { primaryStage.setTitle(df.format(new Date())); System.out.println(df.format(new Date()));};
以上代码等同于:
EventHandlereventHandler = new EventHandler () { @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() { @Override public void handle(ActionEvent event) { primaryStage.setTitle(df.format(new Date())); System.out.println(df.format(new Date())); }}));