Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使fxml文件适合ChildanCorpane?_Java_Javafx_Javafx 8_Scenebuilder - Fatal编程技术网

Java 如何使fxml文件适合ChildanCorpane?

Java 如何使fxml文件适合ChildanCorpane?,java,javafx,javafx-8,scenebuilder,Java,Javafx,Javafx 8,Scenebuilder,我正在做我的项目,它有两个fxml文件,我设法从MainController以两种方式打开了两个fxml文件,如 这两个操作都是通过单击按钮执行的 创建和打开新的舞台、场景并加载fxml文件 用fxml替换儿童锚烷 问题是在第二种方式:fxml文件将不适合根据子锚点窗格,我已经在我的主fxml文件中定义了坐标,它出现在primaryStage的左上角,有什么方法可以解决这个问题 请按照屏幕截图说明我的应用程序的GUI视图。 MainController.java 首先,使用内部类的构造函数来修

我正在做我的项目,它有两个fxml文件,我设法从MainController以两种方式打开了两个fxml文件,如

这两个操作都是通过单击按钮执行的

  • 创建和打开新的舞台、场景并加载fxml文件
  • 用fxml替换儿童锚烷 问题是在第二种方式:fxml文件将不适合根据子锚点窗格,我已经在我的主fxml文件中定义了坐标,它出现在primaryStage的左上角,有什么方法可以解决这个问题

    请按照屏幕截图说明我的应用程序的GUI视图。

    MainController.java


    首先,使用内部类的构造函数来修改场景是毫无意义的,除非这些类具有其他一些功能。在这种情况下,创建对象并没有真正的原因。相反,功能应该转移到方法,例如

    void replaceChild() throws IOException{
        HostScreen = (AnchorPane)FXMLLoader.load(getClass().getResource("SQLHostWindow.fxml"));
        MainScreen.getChildren().set(0, HostScreen);
        System.out.println(MainScreen.getChildren().get(0));
    }
    
    @FXML
    public void OpenHostScreen(ActionEvent event) throws IOException{
        replaceChild();
    }
    
    此外,不能仅仅因为替换了节点,就期望将原始节点的布局参数传递到替换节点<代码>窗格s通常将布局属性存储在子节点的
    属性
    映射内。此地图的内容不会自动复制

    此外,子
    节点
    的某些属性可能与父节点相关,具体取决于它的类型和存储在
    属性
    中的参数:

    • layoutX
      layoutY
      (如果它们不是由家长决定的)
    • managed
    • 平移、旋转、缩放
    • 大小
    在这种情况下,您很可能只需要复制定位点、大小和位置,这可以通过复制属性并指定
    layoutX
    layoutY
    prefWidth
    prefHeight
    来完成

    示例

    @Override
    public void start(Stage primaryStage) {
        Region back = new Region();
        back.relocate(10, 10);
        back.setPrefSize(590, 390);
        back.setStyle("-fx-background-color: blue;");
    
        AnchorPane.setBottomAnchor(back, 10d);
        // AnchorPane.setTopAnchor(back, 10d);
        AnchorPane.setLeftAnchor(back, 10d);
        AnchorPane.setRightAnchor(back, 10d);
    
        Button btn = new Button("Change");
    
        AnchorPane root = new AnchorPane(back, btn);
    
        btn.setOnAction((ActionEvent event) -> {
            // replace first child of root with new one; keep anchors & position/size
            Region region = new Region();
            region.setStyle("-fx-background-color: red;");
            Node oldRegion = root.getChildren().set(0, region);
    
            // copy properties from old map
            Map<Object, Object> properties = region.getProperties();
            oldRegion.getProperties().forEach((k, v) -> properties.putIfAbsent(k, v));
    
            // copy position & set pref size to size of replaced node
            region.relocate(oldRegion.getLayoutX(), oldRegion.getLayoutX());
            Bounds bounds = oldRegion.getLayoutBounds();
            region.setPrefSize(bounds.getWidth(), bounds.getHeight());
        });
    
        Scene scene = new Scene(root, 600, 400);
    
        primaryStage.setScene(scene);
        primaryStage.show();
    }
    
    @覆盖
    公共无效开始(阶段primaryStage){
    区域返回=新区域();
    返回。重新定位(10,10);
    back.setPrefSize(590390);
    back.setStyle(“-fx背景色:蓝色;”);
    锚烷.立根摇床(背部,10d);
    //AnchorPane.setTopAnchor(背面,10d);
    AnchorPane.setLeftAnchor(背面,10d);
    AnchorPane.setRightAnchor(背面,10d);
    按钮btn=新按钮(“更改”);
    锚烷根=新锚烷(背面,btn);
    btn.setOnAction((ActionEvent事件)->{
    //用新的替换根的第一个子级;保留锚固件和位置/尺寸
    区域=新区域();
    region.setStyle(“-fx背景色:红色;”);
    节点oldRegion=root.getChildren().set(0,区域);
    //从旧地图复制属性
    映射属性=region.getProperties();
    forEach((k,v)->properties.putIfAbsent(k,v));
    //复制位置并将pref size设置为替换节点的大小
    region.relocate(oldRegion.getLayoutX(),oldRegion.getLayoutX());
    Bounds Bounds=oldRegion.getLayoutBounds();
    region.setPrefSize(bounds.getWidth(),bounds.getHeight());
    });
    场景=新场景(root,600400);
    初级阶段。场景(场景);
    primaryStage.show();
    }
    
    @Override
    public void start(Stage primaryStage) {
        Region back = new Region();
        back.relocate(10, 10);
        back.setPrefSize(590, 390);
        back.setStyle("-fx-background-color: blue;");
    
        AnchorPane.setBottomAnchor(back, 10d);
        // AnchorPane.setTopAnchor(back, 10d);
        AnchorPane.setLeftAnchor(back, 10d);
        AnchorPane.setRightAnchor(back, 10d);
    
        Button btn = new Button("Change");
    
        AnchorPane root = new AnchorPane(back, btn);
    
        btn.setOnAction((ActionEvent event) -> {
            // replace first child of root with new one; keep anchors & position/size
            Region region = new Region();
            region.setStyle("-fx-background-color: red;");
            Node oldRegion = root.getChildren().set(0, region);
    
            // copy properties from old map
            Map<Object, Object> properties = region.getProperties();
            oldRegion.getProperties().forEach((k, v) -> properties.putIfAbsent(k, v));
    
            // copy position & set pref size to size of replaced node
            region.relocate(oldRegion.getLayoutX(), oldRegion.getLayoutX());
            Bounds bounds = oldRegion.getLayoutBounds();
            region.setPrefSize(bounds.getWidth(), bounds.getHeight());
        });
    
        Scene scene = new Scene(root, 600, 400);
    
        primaryStage.setScene(scene);
        primaryStage.show();
    }