获取对 FXML ImageView 的引用
Getting reference to FXML ImageView
我正在用 JavaFX 制作游戏,为此我有 5x9 的 ImageView 网格和一些标签。当我尝试获取对 label 的引用时,我成功了。但是,当我尝试获取对 ImageView 的引用时,我得到 nullPointerException。
这是 root 的声明方式:
FXMLLoader loaderTwo = new FXMLLoader(getClass().getResource("/game/levelTwo.fxml"));
Parent rootTwo = loaderTwo.load();
this.handlerTwo = loaderTwo.getController();
这是标签的 FXML 部分:
<Label fx:id="sunCountLabel" layoutX="121.0" layoutY="15.0" minHeight="72.2891845703125" prefHeight="88.0" prefWidth="203.0" text="Label">
<font>
<Font name="Gabriola" size="60.0" />
</font>
</Label>
图像视图的 FXML 部分:
<ImageView fx:id="OneFive" fitHeight="180.0" fitWidth="180.0" layoutX="892.0" layoutY="102.0">
<effect>
<DropShadow height="1.0" radius="0.0" width="1.0" />
</effect>
<image>
<Image url="@../media/half.png" />
</image>
</ImageView>
这是我提到它们的地方:
this.root = this.map.getLevel(2).getRoot();
Label l = (Label)this.root.lookup("#sunCountLabel");
ImageView i = (ImageView)this.root.lookup("OneFive");
System.out.println(i==null);
l.setText("1999");
问题是 Label 工作正常但 Imageview 给出 nullPointerException
我不明白为什么?
此外,场景加载完美,图像地址等没有问题。
您正在使用的选择器是类型选择器,也就是说,只有当节点从 getTypeSelector
method 返回 "OneFive"
时,它才会起作用。 ImageView
不会这样做。
您可能想使用 ID 选择器。这要求您在选择器字符串的开头插入一个 #
:
ImageView i = (ImageView)this.root.lookup("#OneFive");
我强烈建议将 ImageView
注入控制器中的字段并通过控制器访问 ImageView
。另请注意,在某些情况下 lookup
不起作用。在 ScrollPane
中查找内容,例如在第一次布局通过之前不起作用,因为添加 content
的节点结构是在第一次布局通过期间创建的。
我正在用 JavaFX 制作游戏,为此我有 5x9 的 ImageView 网格和一些标签。当我尝试获取对 label 的引用时,我成功了。但是,当我尝试获取对 ImageView 的引用时,我得到 nullPointerException。
这是 root 的声明方式:
FXMLLoader loaderTwo = new FXMLLoader(getClass().getResource("/game/levelTwo.fxml"));
Parent rootTwo = loaderTwo.load();
this.handlerTwo = loaderTwo.getController();
这是标签的 FXML 部分:
<Label fx:id="sunCountLabel" layoutX="121.0" layoutY="15.0" minHeight="72.2891845703125" prefHeight="88.0" prefWidth="203.0" text="Label">
<font>
<Font name="Gabriola" size="60.0" />
</font>
</Label>
图像视图的 FXML 部分:
<ImageView fx:id="OneFive" fitHeight="180.0" fitWidth="180.0" layoutX="892.0" layoutY="102.0">
<effect>
<DropShadow height="1.0" radius="0.0" width="1.0" />
</effect>
<image>
<Image url="@../media/half.png" />
</image>
</ImageView>
这是我提到它们的地方:
this.root = this.map.getLevel(2).getRoot();
Label l = (Label)this.root.lookup("#sunCountLabel");
ImageView i = (ImageView)this.root.lookup("OneFive");
System.out.println(i==null);
l.setText("1999");
问题是 Label 工作正常但 Imageview 给出 nullPointerException
我不明白为什么?
此外,场景加载完美,图像地址等没有问题。
您正在使用的选择器是类型选择器,也就是说,只有当节点从 getTypeSelector
method 返回 "OneFive"
时,它才会起作用。 ImageView
不会这样做。
您可能想使用 ID 选择器。这要求您在选择器字符串的开头插入一个 #
:
ImageView i = (ImageView)this.root.lookup("#OneFive");
我强烈建议将 ImageView
注入控制器中的字段并通过控制器访问 ImageView
。另请注意,在某些情况下 lookup
不起作用。在 ScrollPane
中查找内容,例如在第一次布局通过之前不起作用,因为添加 content
的节点结构是在第一次布局通过期间创建的。