java - javafx中改变场景

标签 java javafx timeline

这段代码有什么问题吗? 我真的很困惑! 我想改变主舞台的场景。

public class SignInController {
    @FXML
    TextField SignInPassword;

    @FXML
    TextField SignInUsername;

    @FXML
    CheckBox RememberMe;

    public void signUpScene(MouseEvent mouseEvent) throws IOException {
        Timeline timeline = new Timeline();
        Scene SignUpScene = new Scene(FXMLLoader.load(getClass().getResource("sign up.fxml")),700,700);
        Main.pstage.setScene(SignUpScene);
        timeline.getKeyFrames().addAll(
                new KeyFrame(Duration.ZERO,new KeyValue(SignUpScene.getWidth(),0.0 )),
                new KeyFrame(Duration.millis(1000.0d),new KeyValue(SignUpScene.getWidth(),700.0 ) )
        );

        timeline.play();
    }
}

最佳答案

如果您想要为容纳新场景的舞台宽度设置动画,您可以使用 Transition :

public void signUpScene(MouseEvent mouseEvent) throws IOException {
        Scene SignUpScene = new Scene(FXMLLoader.load(getClass().getResource("sign up.fxml")),700,700);
        Main.pstage.setScene(SignUpScene);

        Rectangle clip = new Rectangle(0, 700);

        Transition animateStage = new Transition() {
            {
                setCycleDuration(Duration.millis(1000));
            }
            @Override
            protected void interpolate(double t) {
                Main.pstage.setWidth(t * 700.0);
            }
        };
        animateStage.play();
    }
}

也许更好的方法是使用剪辑逐渐揭示新场景:

public void signUpScene(MouseEvent mouseEvent) throws IOException {

        Parent root = FXMLLoader.load(getClass().getResource("sign up.fxml"));

        Scene SignUpScene = new Scene(root,700,700);
        Main.pstage.setScene(SignUpScene);

        Rectangle clip = new Rectangle(0, 700);
        Timeline animate = new Timeline(
           new KeyFrame(Duration.millis(1000), 
               new KeyValue(clip.widthProperty(), 700.0));
        root.setClip(clip);
        // when animation finishes, remove clip:
        animate.setOnFinished(e -> root.setClip(null));
        animate.play();
    }
}

关于java - javafx中改变场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44359301/

相关文章:

actionscript-3 - 通过 ActionScript 3在时间轴上引用现有声音对象

javascript - 循环遍历日期数组并使用 javascript/jQuery 标记 10 年范围

javascript - 谷歌图表时间轴水平滚动

java - 当页面没有元素时返回空的 "content"数组

java - 通过步骤定义类实现Cucumber "cucumber.api.java8.En"接口(interface)

java - 尝试从 Java 调用 JavaFX 应用程序... NoSuchMethodException

JavaFX - setOnAction 不适用

java - 用户输入使用 while 循环来存储数据

java - 帮助在切割棒问题中将 C++ 代码转换为 Java

java - 如何将 JSON 转换为 Java 对象,反之亦然