我现在的目标是创建一个网格,这将是我的游戏的基础。当玩家从菜单开始游戏时,这个网格应该出现在游戏场景上。稍后,我希望能够根据用户输入更改电路板的大小
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()添加节点的问题?
您需要将.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的实体管理器一起使用。如果