当前位置: 首页 > 知识库问答 >
问题:

不能使用root.getChildrenUnmodifable(),只能使用root.getChildrenUnmodifable()

田成化
2023-03-14

我现在的目标是创建一个网格,这将是我的游戏的基础。当玩家从菜单开始游戏时,这个网格应该出现在游戏场景上。稍后,我希望能够根据用户输入更改电路板的大小

1.在eventhandler中创建网格

我的推理是当玩家点击启动游戏的“SinglePlayer”按钮时创建网格。根据这个推理,我将简单地获取根节点(一个组)的子节点,并将gridpane添加到其中

为什么我被困住了

下面的代码段显示处理on button click事件的控制器。注释完后,我创建了一个按钮,获得了根节点,并使用了标准的getChildren().add(...)方法。然而,这是失败的。Intellij实际上建议使用getChildrenUnmodiable()。根据我的理解,getChildrenUnmodifable()是只读的,这不符合我的目的。我读到的问题是父母是受保护的,不能修改。那该去哪里修改呢?

@FXML
public void onButtonChangeScene(ActionEvent event) throws IOException {
    // Go to single player window
    if (event.getSource().equals(singleplayer)){
        Parent root = FXMLLoader.load(getClass().getResource("Views/board.fxml"));
        Scene rootscene = new Scene(root);

        //Get stage information
        Stage window = (Stage) ((Node)event.getSource()).getScene().getWindow();
        window.setScene(rootscene);


        // Creates the board
        Button button1 = new Button("Button 1");
        //Part that fails
        root.getchildren().add(button1);

        window.show();

fxml文件如下所示

Group xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.BoardController">
   <children>
      <BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0">
         <left>
            <AnchorPane prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER">
               <children>
                  <Label alignment="CENTER" contentDisplay="CENTER" layoutY="6.0" prefHeight="17.0" prefWidth="200.0" text="Player 1">
                     <font>
                        <Font size="30.0" />
                     </font>
                  </Label>
                  <Label alignment="CENTER" contentDisplay="CENTER" layoutY="51.0" prefHeight="17.0" prefWidth="200.0" text="1200">
                     <font>
                        <Font size="30.0" />
                     </font>
                  </Label>
                  <Button fx:id="abandon" layoutX="71.0" layoutY="342.0" mnemonicParsing="false" onAction="#onButtonChangeScene" text="Abandon" />
               </children>
            </AnchorPane>
         </left>
         <right>
            <AnchorPane prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER">
               <children>
                  <Label alignment="CENTER" contentDisplay="CENTER" layoutY="7.0" prefHeight="17.0" prefWidth="200.0" text="Player 2">
                     <font>
                        <Font size="30.0" />
                     </font>
                  </Label>
                  <Label alignment="CENTER" contentDisplay="CENTER" layoutY="52.0" prefHeight="17.0" prefWidth="200.0" text="800">
                     <font>
                        <Font size="30.0" />
                     </font>
                  </Label>
               </children>
            </AnchorPane>
         </right>
         <center>
            <GridPane fx:id="gridpane" BorderPane.alignment="CENTER">
              <columnConstraints>
                <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
                <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
              </columnConstraints>
              <rowConstraints>
                <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
                <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
                <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
              </rowConstraints>
               <children>
                  <ImageView fitHeight="118.0" fitWidth="99.0" pickOnBounds="true" preserveRatio="true">
                     <image>
                        <Image url="@../Images/bluecard.png" />
                     </image>
                  </ImageView>
                  <ImageView fitHeight="150.0" fitWidth="200.0" pickOnBounds="true" preserveRatio="true" GridPane.rowIndex="1" />
                  <ImageView fitHeight="150.0" fitWidth="200.0" pickOnBounds="true" preserveRatio="true" GridPane.columnIndex="1" GridPane.rowIndex="1" />
                  <ImageView fitHeight="150.0" fitWidth="200.0" pickOnBounds="true" preserveRatio="true" GridPane.rowIndex="2" />
                  <ImageView fitHeight="150.0" fitWidth="200.0" pickOnBounds="true" preserveRatio="true" GridPane.columnIndex="1" GridPane.rowIndex="2" />
               </children>
            </GridPane>
         </center>
      </BorderPane>
   </children>
</Group>

b)在FXML文件中静态创建,修改板的大小

2如何解决root.getChildren()添加节点的问题?

共有1个答案

邓德本
2023-03-14

您需要将.add()与Pane一起使用,并且您的root不是一个Pane。

试试看

private BorderPane mainpane = (BorderPane)root.getchildren();
mainpane.add(gridpane);

<BorderPane fx:id = "mainpane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0">
private BorderPane mainpane;
private GridPane gridpane;
mainpane.add(gridpane);
 类似资料:
  • 我正在尝试自动旋转一个具有S3起源的CloudFront发行版。我希望将源设置为S3网站URL,例如。因此,我认为我的Cloudformation模板应该如下所示: 但是,这会产生以下错误: 参数Origin DomainName未引用有效的S3 bucket。 这是真的,所以我可以指定S3 bucket。但我希望我的起源是网站endpoint。我的非自动化解决方案是使用S3 RESTendpoi

  • 问题内容: 我这样做: 并获得此异常: 不兼容的类型:Intf不是功能接口接口Intf中存在多个非重写的抽象方法。用-Xdiags:verbose重新编译以获得完整的输出1错误 是否有任何条件不能使用lambda替换匿名类? 问题答案: 否。没有办法“克服”这一问题。功能接口必须只有一种抽象方法。您的界面有两个: 注意:您不需要注释中提到的界面注释。但是,如果您的接口不是有效的功能接口,则可以使用

  • 我有以下rest服务: 我能做错什么?如何使我的应用程序从json消费实体,而不是? 更新:实体类代码不包含任何有趣的内容,只有和两个带有一些jpa注释的字段。 Update2:完整StackTrace: update3:我没有找到任何解决方案,所以我通过使用s而不是JSON来替换method argument和。但无论如何都需要解决方案。

  • 我正在Windows 2012R2上运行MySQL 5.6.26,在MySQL.ini中,所有内容都配置为使用UTF-8 Unicode(utf8)。 当我执行以下SQL命令时: 数据库返回给我以下数据: 118威尼斯3 5 0 56

  • 我想知道为什么人们似乎不使用GraphQL jus与Redux。 我以前从未使用过GraphQL,但我想开始一个新项目,但阿波罗和继电器都不能说服我。目前,我正在创建一个使用react和redux以及“老式”RESTAPI的应用程序。我喜欢redux的想法,它将我的应用程序的全部信息存储在一个地方。 现在,据我所知,阿波罗和中继都做了类似的事情,但它们使用单独的存储,在这两者中,我们混合了逻辑和视

  • 问题内容: 我的非ejb应用程序中如何包含以下代码。该代码有效。 在一个新的应用程序中,我正在使用EJB3 + JSF,并且想重用包含上面代码的库。我对新应用程序的持久性单元如下所示: 我的新应用程序在遇到此行时引发异常: 例外是: 这很清楚。问题是如何将代码转换为由容器管理的事务。大概需要对我的bean方法进行适当的注释…问题是如何? 问题答案: 与资源类型为local的实体管理器一起使用。如果