如何通过组JavaFX定位节点

时间:2019-03-17 20:52:40

标签: javafx

在Java FX中使用Group的setLayout定位按钮时遇到一些麻烦。我的程序通过一个开始按钮来运行游戏。

我的更新代码:

    // Setting the layout of the button
    root.getChildren().get(root.getChildren().size() - 1).setTranslateX(SCENE_WIDTH / 2);
    root.getChildren().get(root.getChildren().size() - 1).setTranslateY(SCENE_HEIGHT / 10);

我的代码按以下顺序将节点分配给组:Canvas1,Canvas2,Canvas3,Canvas4,Button。

上面的代码获取列表(按钮)中的最后一个节点。该代码对按钮也无效。

那我如何在组内的列表中找到一个节点并相应地定位它?

输出:

enter image description here

预期输出:

enter image description here

2 个答案:

答案 0 :(得分:2)

似乎您要使用的容器(组)使用的是错误的容器。

应该如何相对于开始按钮显示四个Canvas节点? 您可能要使用AnchorPane或VBox。这完全取决于整体布局。

您可能要考虑使用SceneBuilder进行主要布局:https://gluonhq.com/products/scene-builder/

还要考虑一下Group对布局所做的工作(不多): https://github.com/javafxports/openjdk-jfx/blob/develop/modules/javafx.graphics/src/main/java/javafx/scene/Group.java

除非在新的Parent子类中实现layoutChildren,否则通常不调用setLayoutX / Y。

编辑: 要堆叠Canvas节点,可以将它们放置在StackPane中,但是我想我会使用AnchorPane,因为您可以轻松地将按钮锚定为与AnchorPane的底部边缘偏移。

答案 1 :(得分:1)

不要使用setLayout,布局管理器会使用它来移动子级(例如StackPane)。小组不是一个。请改用setTranslateX。