我在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));
}
});
// ...
}
}
但是,这里的正确方法还是选择适当的布局窗格以实现所需的功能。