1

彼ら。ワンステージでトグルシーンを作らないといけない。最後の 1 つはサイズが変更される場合があります。だから私は問題を満たしています - 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);
}

}

4

0 に答える 0