在 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));
}
});
// ...
}
}
但是,这里正确的方法是选择适当的布局窗格来实现您想要的。
我正在为 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));
}
});
// ...
}
}
但是,这里正确的方法是选择适当的布局窗格来实现您想要的。