我正在为javafx中的项目创建UI。我正在使用CSS作为样式,FXML用于结构,还有.java控制器。我正在尝试使我的节点(即按钮,边框)布局绑定到场景大小,以便可以调整窗口大小并使布局保持不变。通常,如果节点是在jar文件中定义的,我会使用:
button.layoutYProperty().bind((scene.heightProperty().divide(2)));
或类似的东西,但我的节点是在FXML文件中定义的。 如何从FXML文件外部访问节点,以便我可以定义布局或如何在FXML文件中定义布局。 (我没有使用,也不打算使用场景构建器。)
答案 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));
}
});
// ...
}
}
但同样,这里正确的方法是选择合适的布局窗格来实现您想要的效果。