我在javafx中为项目创建UI。我在样式中使用CSS,在结构中使用FXML,还使用.java控制器。我正在尝试将我的节点(即按钮,边框)的布局绑定到场景大小,以便可以调整窗口的大小并使布局保持不变。通常,如果节点在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));
            }
        });

        // ...
    }
}


但是,这里的正确方法还是选择适当的布局窗格以实现所需的功能。

10-05 21:19
查看更多