在FXML中设置节点layoutProperty()

时间:2016-10-25 20:49:43

标签: java layout javafx fxml

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

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

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

1 个答案:

答案 0 :(得分:1)

首先,你永远不需要做这样的事情。如果使用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));
            }
        });

        // ...
    }
}

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