📜  JavaFX-效果(1)

📅  最后修改于: 2023-12-03 14:42:23.089000             🧑  作者: Mango

JavaFX-效果

介绍

JavaFX 是 Java 平台上的一个图形用户界面(GUI) 工具箱,可以很容易地创建并展示漂亮的界面和效果。

JavaFX 提供了丰富的 UI 控件、多媒体功能、动画效果等等,使得开发者在制作 UI 时更加简单高效。本文将介绍一些 JavaFX 支持的效果,并给出相应代码片段,帮助读者快速上手。

效果列表

以下是 JavaFX 支持的一些效果及其对应代码片段。

圆形进度条
ProgressBar progressBar = new ProgressBar();

Circle circle = new Circle(50);
circle.setStroke(Color.GRAY);
circle.setStrokeWidth(5);
progressBar.setPrefWidth(150);
progressBar.setPrefHeight(150);

StackPane stackPane = new StackPane();
stackPane.getChildren().addAll(circle, progressBar);
Scene scene = new Scene(stackPane, 400, 400);

primaryStage.setScene(scene);
primaryStage.show();
钟表
Group root = new Group();
Scene scene = new Scene(root, 200, 200);

Canvas canvas = new Canvas(200, 200);
GraphicsContext gc = canvas.getGraphicsContext2D();

root.getChildren().add(canvas);

KeyFrame keyFrame = new KeyFrame(Duration.seconds(1), event -> {
    Calendar calendar = Calendar.getInstance();
    int second = calendar.get(Calendar.SECOND);
    int minute = calendar.get(Calendar.MINUTE);
    int hour = calendar.get(Calendar.HOUR);
    gc.clearRect(0, 0, 200, 200);
    gc.setLineWidth(3);

    // 画时针
    gc.save();
    gc.setStroke(Color.BLACK);
    gc.translate(100, 100);
    gc.rotate(hour * 30 + minute / 2.0);
    gc.strokeLine(0, 0, 30, 0);
    gc.restore();

    // 画分针
    gc.save();
    gc.setStroke(Color.BLUE);
    gc.translate(100, 100);
    gc.rotate(minute * 6);
    gc.strokeLine(0, 0, 50, 0);
    gc.restore();

    // 画秒针
    gc.save();
    gc.setStroke(Color.RED);
    gc.translate(100, 100);
    gc.rotate(second * 6);
    gc.strokeLine(0, 0, 70, 0);
    gc.restore();
});

Timeline timeline = new Timeline(keyFrame);
timeline.setCycleCount(Animation.INDEFINITE);
timeline.play();

primaryStage.setScene(scene);
primaryStage.show();
旋转动画
Rectangle rectangle = new Rectangle(100, 100, Color.BLUE);
RotateTransition rotateTransition = new RotateTransition(Duration.seconds(2), rectangle);
rotateTransition.setByAngle(360);
rotateTransition.setCycleCount(Animation.INDEFINITE);
rotateTransition.setAutoReverse(true);
rotateTransition.setInterpolator(Interpolator.LINEAR);
rotateTransition.play();

StackPane stackPane = new StackPane();
stackPane.getChildren().add(rectangle);
Scene scene = new Scene(stackPane, 400, 400);

primaryStage.setScene(scene);
primaryStage.show();
总结

JavaFX 支持多种多样的效果,可以方便地创造出漂亮的界面。通过学习本文的例子,可以方便地在自己的程序中加入这些效果,提高用户体验。