Toggle javafx阶段设置场景
伙计们。 我必须在一个阶段制作切换场景。最后一个可以调整大小。所以我遇到了一个问题——调用setScene()后,活动场景并没有重新计算布局,只有在调整舞台动作的大小之后。有没有人知道我的错误在哪里,或者是特定阶段的错误? 下面是我的代码示例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
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);
}
}为什么要切换场景而不是更改一个现有场景的根窗格?或者你甚至可以保持根完整,但改变它的子代。