Toggle javafx阶段设置场景

Toggle javafx阶段设置场景,toggle,javafx-2,scale,stage,scene,Toggle,Javafx 2,Scale,Stage,Scene,伙计们。 我必须在一个阶段制作切换场景。最后一个可以调整大小。所以我遇到了一个问题——调用setScene()后,活动场景并没有重新计算布局,只有在调整舞台动作的大小之后。有没有人知道我的错误在哪里,或者是特定阶段的错误? 下面是我的代码示例 public class SceneToggle extends Application { Stage primaryStage; Scene scene1; Scene scene2; @Override public void start(Stage

伙计们。 我必须在一个阶段制作切换场景。最后一个可以调整大小。所以我遇到了一个问题——调用setScene()后,活动场景并没有重新计算布局,只有在调整舞台动作的大小之后。有没有人知道我的错误在哪里,或者是特定阶段的错误? 下面是我的代码示例

public class SceneToggle extends Application {
Stage primaryStage;
Scene scene1;
Scene scene2;
@Override
public void start(Stage _primaryStage) {
    primaryStage=_primaryStage;
    StackPane root1 = new StackPane();
    root1.getChildren().addAll(new Rectangle(0,0,100,100));
    scene1 = new Scene(root1,Color.RED);
    StackPane root2 = new StackPane();
    root2.getChildren().addAll(new Circle(0,0,50));
    scene2 = new Scene(root2,Color.GREEN);
    primaryStage.setScene(scene1);
    double screenWidth=200;
    double screenHeight=200;
    scene1.getRoot().scaleXProperty().bind(primaryStage.widthProperty().divide(screenWidth));
    scene1.getRoot().scaleYProperty().bind(primaryStage.heightProperty().divide(screenHeight));
    scene2.getRoot().scaleXProperty().bind(primaryStage.widthProperty().divide(screenWidth));
    scene2.getRoot().scaleYProperty().bind(primaryStage.heightProperty().divide(screenHeight));
    ObservableList<Screen> screens = Screen.getScreens();
    Rectangle2D primaryScreenBounds = screens.get((screens.size() > 1) ? 1 : 0).getBounds();
    primaryStage.setX(primaryScreenBounds.getMinX());
    primaryStage.setY(primaryScreenBounds.getMinY());
    primaryStage.setWidth(screenWidth);
    primaryStage.setHeight(screenHeight);
    primaryStage.setTitle("Scene togling");
    primaryStage.show();
    primaryStage.addEventFilter(MouseEvent.MOUSE_RELEASED, new EventHandler<MouseEvent>() {
        @Override public void handle(MouseEvent event) {
              if(primaryStage.getScene().equals(scene1)){
                  primaryStage.setScene(scene2);
              }else{
                  primaryStage.setScene(scene1);
              }

        }
    });
    /*scene1.getRoot().addEventHandler(MouseEvent.MOUSE_PRESSED, new EventHandler<MouseEvent>() {
        @Override public void handle(MouseEvent event) {
            scene2.getRoot().setVisible(true);
            primaryStage.setScene(scene2);
            scene1.getRoot().setVisible(false);
        }
    });
    scene2.getRoot().addEventHandler(MouseEvent.MOUSE_PRESSED, new EventHandler<MouseEvent>() {
        @Override public void handle(MouseEvent event) {
            scene1.getRoot().setVisible(true);
            primaryStage.setScene(scene1);
            scene2.getRoot().setVisible(false);
        }
    });*/
    /*scene1.getRoot().addEventHandler(MouseEvent.MOUSE_PRESSED, new EventHandler<MouseEvent>() {
        @Override public void handle(MouseEvent event) {
            scene2.getRoot().setVisible(true);
            primaryStage.setScene(scene2);
            scene1.getRoot().setVisible(false);
        }
    });
    scene2.getRoot().addEventHandler(MouseEvent.MOUSE_PRESSED, new EventHandler<MouseEvent>() {
        @Override public void handle(MouseEvent event) {
            scene1.getRoot().setVisible(true);
            primaryStage.setScene(scene1);
            scene2.getRoot().setVisible(false);
        }
    });*/
}

/**
 * The main() method is ignored in correctly deployed JavaFX application.
 * main() serves only as fallback in case the application can not be
 * launched through deployment artifacts, e.g., in IDEs with limited FX
 * support. NetBeans ignores main().
 *
 * @param args the command line arguments
 */
public static void main(String[] args) {
    launch(args);
}
公共类场景切换扩展应用程序{
初级阶段;
场景1;
场景2;
@凌驾
公共无效启动(阶段u初级阶段){
初级阶段=_初级阶段;
StackPane root1=新的StackPane();
root1.getChildren().addAll(新矩形(0,0100));
scene1=新场景(root1,Color.RED);
StackPane root2=新的StackPane();
root2.getChildren().addAll(新圆圈(0,0,50));
scene2=新场景(root2,Color.GREEN);
初生阶段:场景1;
双屏宽=200;
双屏高=200;
scene1.getRoot().scaleProperty().bind(primaryStage.widthProperty().divide(screenWidth));
scene1.getRoot().scaleYProperty().bind(primaryStage.heightProperty().divide(screenHeight));
scene2.getRoot().scaleProperty().bind(primaryStage.widthProperty().divide(screenWidth));
scene2.getRoot().scaleYProperty().bind(primaryStage.heightProperty().divide(screenHeight));
ObservableList screens=Screen.getScreens();
Rectangle2D primaryScreenBounds=screens.get((screens.size()>1)?1:0.getBounds();
setX(primaryScreenBounds.getMinX());
setY(primaryScreenBounds.getMinY());
初级阶段。设置宽度(屏幕宽度);
初级阶段设置高度(屏幕高度);
primaryStage.setTitle(“场景切换”);
primaryStage.show();
primaryStage.addEventFilter(MouseEvent.MOUSE_已发布,新的EventHandler(){
@重写公共无效句柄(MouseeEvent事件){
if(primaryStage.getScene().equals(scene1)){
初生阶段。设置场景(场景2);
}否则{
初生阶段:场景1;
}
}
});
/*scene1.getRoot().addEventHandler(按下MouseEvent.MOUSE_,新建EventHandler()){
@重写公共无效句柄(MouseeEvent事件){
scene2.getRoot().setVisible(true);
初生阶段。设置场景(场景2);
scene1.getRoot().setVisible(false);
}
});
scene2.getRoot().addEventHandler(按下MouseEvent.MOUSE_,新建EventHandler()){
@重写公共无效句柄(MouseeEvent事件){
scene1.getRoot().setVisible(true);
初生阶段:场景1;
scene2.getRoot().setVisible(false);
}
});*/
/*scene1.getRoot().addEventHandler(按下MouseEvent.MOUSE_,新建EventHandler()){
@重写公共无效句柄(MouseeEvent事件){
scene2.getRoot().setVisible(true);
初生阶段。设置场景(场景2);
scene1.getRoot().setVisible(false);
}
});
scene2.getRoot().addEventHandler(按下MouseEvent.MOUSE_,新建EventHandler()){
@重写公共无效句柄(MouseeEvent事件){
scene1.getRoot().setVisible(true);
初生阶段:场景1;
scene2.getRoot().setVisible(false);
}
});*/
}
/**
*在正确部署的JavaFX应用程序中忽略main()方法。
*main()仅在应用程序无法运行时用作回退
*通过部署工件启动,例如在具有有限FX的IDE中
*support.NetBeans忽略main()。
*
*@param指定命令行参数
*/
公共静态void main(字符串[]args){
发射(args);
}

}

为什么要切换场景而不是更改一个现有场景的根窗格?或者你甚至可以保持根完整,但改变它的子代。