java - 如何在具有两个场景的 JavaFXML Controller 中初始化圆形对象的双数组?

标签 java javafx-2 fxml scenebuilder

我正在使用 JavaFXMLGluon Scene Builder 8.0.0 进行编码,以创建像素编辑器应用程序。我创建了两个 .fxml 文件,一个用于绘图工具 (sample.fxml),另一个用于表示 LED 像素阵列的圆形对象数组 (32 x 32) (PixelEditor.fxml)。两者共享相同的 Controller (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 即可为 Circle 对象赋值,如下所示:

@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>

最佳答案

看起来您实际上并未为以下任何一个设置值:R0C0R0C1 等。如果在创建数组时将这些变量设置为 null,它们仍将是 null 即使您稍后设置它们

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

关于java - 如何在具有两个场景的 JavaFXML Controller 中初始化圆形对象的双数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32339237/

相关文章:

java - myString.replaceAll(regex ,"") 未按预期工作

java - 在 Spring MVC appcontext.xml 文件中配置两个 mongodb 实例?

java - 谁能告诉我学习 spring 的最好方法是什么

java - ListView细胞工厂: wrong font weight

javafx-2 - Java FX 2 单元格编辑、焦点和文本选择

java - 场景构建器预览和执行中的程序之间的不同布局

java - 从嵌套 HashMap 中检索值

javafx-2 - JavaFX 打开新窗口

java - 通过 FXML 管理 JavaFX 中的场景切换(性能问题)

java - 如何使用 JavaFX 9(StyleManager 的替代品)为应用程序设置多个默认 CSS 样式表?