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