栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JavaFX Switch场景具有幻灯片效果

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JavaFX Switch场景具有幻灯片效果

您无法在两个场景之间应用过渡,因为不可能同时在一个舞台上同时使用这两个场景。一种解决方案是仅拥有一个场景并管理内部的所有过渡,如@James_D答案所示。

但是您也可以模拟两个场景之间的过渡。为此,您可以使用两个快照,在它们之间进行过渡,最后只设置新场景。

这是一个非常基本的工作案例,您可以在新场景中单击以再次前进和后退:

@Overridepublic void start(Stage primaryStage) {    Group root1 = new Group();    Group root2 = new Group();    Scene scene1 = new Scene(root1, 300, 250);    Scene scene2 = new Scene(root2, 300, 250);    Rectangle rectangle2 = new Rectangle(300, 250);    rectangle2.setFill(Color.BLUE);    root2.getChildren().add(rectangle2);    Rectangle rectangle1 = new Rectangle(300, 250);    rectangle1.setFill(Color.RED);    root1.getChildren().add(rectangle1);    primaryStage.setTitle("Hello World!");    primaryStage.setScene(scene1);    primaryStage.show();    rectangle1.setonMouseClicked(e->{        // Create snapshots with the last state of the scenes        WritableImage wi = new WritableImage(300, 250);        Image img1 = root1.snapshot(new SnapshotParameters(),wi);        ImageView imgView1= new ImageView(img1);        wi = new WritableImage(300, 250);        Image img2 = root2.snapshot(new SnapshotParameters(),wi);        ImageView imgView2= new ImageView(img2);        // Create new pane with both images        imgView1.setTranslateX(0);        imgView2.setTranslateX(300);        StackPane pane= new StackPane(imgView1,imgView2);        pane.setPrefSize(300,250);        // Replace root1 with new pane        root1.getChildren().setAll(pane);        // create transtition        Timeline timeline = new Timeline();        KeyValue kv = new KeyValue(imgView2.translateXProperty(), 0, Interpolator.EASE_BOTH);        Keyframe kf = new Keyframe(Duration.seconds(1), kv);        timeline.getKeyframes().add(kf);        timeline.setonFinished(t->{ // remove pane and restore scene 1 root1.getChildren().setAll(rectangle1); // set scene 2 primaryStage.setScene(scene2);        });        timeline.play();    });    rectangle2.setonMouseClicked(e->{        // Create snapshots with the last state of the scenes        WritableImage wi = new WritableImage(300, 250);        Image img1 = root1.snapshot(new SnapshotParameters(),wi);        ImageView imgView1= new ImageView(img1);        wi = new WritableImage(300, 250);        Image img2 = root2.snapshot(new SnapshotParameters(),wi);        ImageView imgView2= new ImageView(img2);        // Create new pane with both images        imgView2.setTranslateX(0);        imgView1.setTranslateX(300);        StackPane pane= new StackPane(imgView2,imgView1);        pane.setPrefSize(300,250);        // Replace root2 with new pane        root2.getChildren().setAll(pane);        // create transtition        Timeline timeline = new Timeline();        KeyValue kv = new KeyValue(imgView1.translateXProperty(), 0, Interpolator.EASE_BOTH);        Keyframe kf = new Keyframe(Duration.seconds(1), kv);        timeline.getKeyframes().add(kf);        timeline.setonFinished(t->{ // remove pane and restore scene 2 root2.getChildren().setAll(rectangle2); // set scene 1 primaryStage.setScene(scene1);        });        timeline.play();    });}

对于更复杂的特效来看看这个。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/637561.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号