如何在具有两个场景的JavaFXML控制器中初始化圆形对象的双数组?

如何在具有两个场景的JavaFXML控制器中初始化圆形对象的双数组?,java,javafx-2,fxml,scenebuilder,Java,Javafx 2,Fxml,Scenebuilder,我正在使用JavaFXML和glionscenebuilder8.0.0编写一个像素编辑器应用程序。我创建了两个.fxml文件,一个用于绘图工具(sample.fxml),另一个用于表示LED像素阵列的圆形对象数组(32 x 32)(PixelEditor.fxml)。两者共享同一个控制器(controller.java) 当用户单击像32h x 32w这样的菜单项时,我无法初始化Controller.java中的Circle[][]数组。我使用了一个4 x4阵列来测试我的代码: public

我正在使用
JavaFXML
glionscenebuilder8.0.0
编写一个像素编辑器应用程序。我创建了两个.fxml文件,一个用于绘图工具(
sample.fxml
),另一个用于表示LED像素阵列的圆形对象数组(32 x 32)(
PixelEditor.fxml
)。两者共享同一个控制器(
controller.java

当用户单击像
32h x 32w
这样的菜单项时,我无法初始化
Controller.java中的
Circle[][]
数组。我使用了一个4 x4阵列来测试我的代码:

public void handleMenuAction(ActionEvent event) throws IOException {

   if(event.getSource() == menu32hx32w) {

  Stage pixelStage = new Stage();
  Parent pixelRoot = FXMLLoader.load(getClass().getResource("PixelEditor.fxml"));
  Scene pixelScene = new Scene(pixelRoot);
  pixelStage.setTitle("Pixel Array: 32h X 32w");
  pixelStage.setScene(pixelScene);
  pixelStage.setX(0.0);
  pixelStage.setY(0.0);
  pixelStage.show();

  Circle[][] pixelArray = {
       {R0C0, R0C1, R0C2, R0C3},
       {R1C0, R1C1, R1C2, R1C3},
       {R2C0, R2C1, R2C2, R2C3},
       {R3C0, R3C1, R3C2, R3C3},
    };
   }
}
如果我打印出阵列,我会得到:

pixelArray:
null null null null 
null null null null 
null null null null 
null null null null
当我只有一个包含所有对象的.fxml时,我可以初始化pixelArray。我使用fx:id引用圆形对象,但将它们放置在单独的舞台和场景中似乎会取消引用它们并创建空元素

我没在做什么


以前,对于一个.fxml文件,我只需要在Controller.java中引用圆对象的fx:id,如下所示:

@FXML
private Circle
R0C0, R0C1, R0C2, R0C3,
R1C0, R1C1, R1C2, R1C3,
R2C0, R2C1, R2C2, R2C3,
R3C0, R3C1, R3C2, R3C3;
这就是我仍在做的,但是通过fx:id引用指定的属性似乎没有连接

PixelEditor.fxml相当大,因为我有32x32=1024个圆形对象,尽管我只是在测试第一个4x4。第一行的代码如下所示:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.geometry.*?>
<?import javafx.scene.shape.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>

<Pane fx:id="panePixelLayout" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="776.0" prefWidth="776.0" xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
    <children>
        <VBox prefHeight="776.0" prefWidth="776.0" style="-fx-background-color: #000000;">
            <children>
                <HBox prefHeight="24.0" prefWidth="776.0" style="-fx-background-color: #000000;">
                    <children>
                        <Circle fx:id="R0C0" fill="DODGERBLUE" onDragDetected="#onDragDetected" onMouseClicked="#pixelClicked" onMouseDragEntered="#onMouseDragEntered" onMousePressed="#onMousePressed" radius="8.0" stroke="BLACK" strokeType="INSIDE" style="-fx-fill: DARKGREY;">
                            <HBox.margin>
                                <Insets left="8.0" top="8.0" />
                            </HBox.margin>
                        </Circle>
                        <Circle fx:id="R0C1" fill="DODGERBLUE" layoutX="22.0" layoutY="22.0" onDragDetected="#onDragDetected" onMouseClicked="#pixelClicked" onMouseDragEntered="#onMouseDragEntered" onMousePressed="#onMousePressed" radius="8.0" stroke="BLACK" strokeType="INSIDE" style="-fx-fill: DARKGREY;">
                            <HBox.margin>
                                <Insets left="8.0" top="8.0" />
                            </HBox.margin>
                        </Circle>
                        <Circle fx:id="R0C2" fill="DODGERBLUE" layoutX="22.0" layoutY="22.0" onDragDetected="#onDragDetected" onMouseClicked="#pixelClicked" onMouseDragEntered="#onMouseDragEntered" onMousePressed="#onMousePressed" radius="8.0" stroke="BLACK" strokeType="INSIDE" style="-fx-fill: DARKGREY;">
                            <HBox.margin>
                                <Insets left="8.0" top="8.0" />
                            </HBox.margin>
                        </Circle>
                        <Circle fx:id="R0C3" fill="DODGERBLUE" layoutX="42.0" layoutY="22.0" onDragDetected="#onDragDetected" onMouseClicked="#pixelClicked" onMouseDragEntered="#onMouseDragEntered" onMousePressed="#onMousePressed" radius="8.0" stroke="BLACK" strokeType="INSIDE" style="-fx-fill: DARKGREY;">
                            <HBox.margin>
                                <Insets left="8.0" top="8.0" />
                            </HBox.margin>
                        </Circle>

看起来您实际上没有将值设置为:
R0C0
R0C1
等。如果在创建数组时将这些变量设置为
null
,即使稍后再设置它们,它们仍将是
null


您没有显示分配
R0C0
的代码部分,但很可能就是问题所在。

看起来您实际上没有为以下任何一项设置值:
R0C0
R0C1
等。如果在创建数组时将这些变量设置为
null
,即使稍后进行设置,它们仍将为空


您尚未显示分配
R0C0
的代码部分,但很可能就是问题所在。

jewelsea在相关问题中回答了此问题,他在以下位置提供了最优秀的答案:


通过创建两个控制器,我可以初始化我的Circle[][]数组,但现在我必须在两个控制器之间传递参数,正如jewelsea通过提供的链接所描述的那样。

jewelsea在相关问题中回答了这个问题,他在以下位置提供了最优秀的答案:


通过创建两个控制器,我可以初始化Circle[][]数组,但现在我必须通过提供的链接在两个控制器之间传递参数。

花点时间阅读帮助中心中的。堆栈溢出上的格式设置与其他站点不同。您的帖子越好看,用户就越容易帮助您。请将您的
PixelEditor.fxml
文件包括在内,好吗?请花点时间阅读帮助中心中的。堆栈溢出上的格式设置与其他站点不同。你的帖子越好看,用户就越容易帮助你。你能把你的
PixelEditor.fxml
文件包括进来吗?以前,有一个.fxml文件,我只需要在Controller.java中引用圆圈对象的fx:id,如下所示:@sgroen把这些信息放到你的问题中,请不要在评论中发布。之前,使用一个.fxml文件,我只需在Controller.java中引用圆圈对象的fx:id即可,如下所示:@sgroen请将该信息发布到您的问题中,不要在评论中发布。