在 FXML 中设置节点 layoutProperty()

Setting node layoutProperty() in FXML

我正在为 javafx 中的一个项目创建一个 UI。我使用 CSS 作为样式,使用 FXML 作为结构,还有 .java 控制器。我试图让我的节点(即按钮,边框)布局绑定到场景大小,以便 window 可以调整大小并且布局保持不变。通常,如果节点是在 jar 文件中定义的,我会使用:

button.layoutYProperty().bind((scene.heightProperty().divide(2)));

或类似的东西,但我的节点是在 FXML 文件中定义的。 如何从 FXML 文件外部访问节点以便定义布局,或者如何在 FXML 文件中定义布局。 (我没有使用也不打算使用场景生成器)。

首先,您永远不需要做这样的事情。如果您使用 layout panes,您应该始终能够选择布局窗格和设置的组合,以根据需要自动定位节点。永远不需要下面列出的解决方案。

在控制器中,您通常无法直接访问 scene,因此您需要监听 sceneProperty() 何时在节点上初始化并采取相应行动:

public class Controller {

    @FXML
    private Button button ;

    public void initialize() {

        button.sceneProperty().addListener((obs, oldScene, newScene) -> {
            button.layoutYProperty().unbind();
            if (newScene != null) {
                button.layoutYProperty().bind(newScene.heightProperty().divide(2));
            }
        });

        // ...
    }
}

但是,这里正确的方法是选择适当的布局窗格来实现您想要的。