在javafx中改变场景
changing scene in javafx
这段代码有什么问题?
我真的很困惑!
我想换个主舞台场景
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();
}
}
这段代码有什么问题? 我真的很困惑! 我想换个主舞台场景
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();
}
}