【问题标题】:Javafx how to trigger a stage layout updateJavafx如何触发阶段布局更新
【发布时间】:2020-02-24 11:11:06
【问题描述】:

我有一个非常简单的 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);
    }
});

上面的代码工作得很好,唯一的问题是窗口布局没有更新以显示新行(我的意思是高度不会自动增加),除非我手动调整窗口大小。

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

更新

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

【问题讨论】:

  • 您是否要调整舞台以适应新行? stage.sizeToScene() 应该这样做(添加行后调用它)

标签: java javafx javafx-8


【解决方案1】:

要将舞台调整为其内容的大小,您可以使用继承的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();
    }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    • 2021-05-29
    • 1970-01-01
    • 2015-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多