Javafx如何触发舞台布局更新

Javafx how to trigger a stage layout update

我有一个非常简单的 Javafx 应用程序,它显示一个由网格支持的表单。在这个表格上我有一个复选框。当用户选中此复选框时,我想动态地向网格添加另一行。

来自我的控制器:

checkbox.selectedProperty().addListener((obs, oldVal, newVal) - > {
    if (!newVal) {
        // Add Username Label
        gridPane.add(new Label("Username : "), 0, 5);

        // Add Username Text Field
        gridPane.add(new TextField(), 1, 5);
    }
});

上面的代码工作正常,唯一的问题是 window 布局没有更新以显示新行(我的意思是高度不会自动增加),除非我手动调整 [=28] =].

问题如何触发布局更新? (我试了gridPane.requestLayout()但是没有效果)

更新

一个丑陋的解决方法是隐藏然后再次显示舞台。

要将舞台的大小调整为其内容的大小,您可以使用继承的 sizeToScene() 方法。以下内容将调整舞台大小以响应您的新行:

checkbox.selectedProperty().addListener((obs, oldVal, newVal) - > {

    if (!newVal) {
        // Add Username Label
        gridPane.add(new Label("Username : "), 0, 5);

        // Add Username Text Field
        gridPane.add(new TextField(), 1, 5);
        gridPane.getScene().getWindow().sizeToScene();
    }
});