彼ら。ワンステージでトグルシーンを作らないといけない。最後の 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);
}
}