在JavaFX的layoutBounds中包含比例因子

在JavaFX的layoutBounds中包含比例因子,java,javafx,layout,Java,Javafx,Layout,我正在使用JavaFX8 从javafx.scene.Node.scaleYProperty()的JavaDoc中: […]默认情况下,此比例因子不包括在layoutBounds中,这使得它非常适合在考虑所有效果和变换后缩放整个节点。[……] 但是,我如何才能在layoutBounds中包含比例因子 一些背景: 在下面的示例中,当按下按钮时,我希望GridPane也对HBox的缩放做出反应,而不必硬编码行约束的预编码高度 能够将缩放因子包含到layoutBounds中可能会起到作用,但也欢迎使用

我正在使用JavaFX8

javafx.scene.Node.scaleYProperty()的JavaDoc中:

[…]默认情况下,此比例因子不包括在layoutBounds中,这使得它非常适合在考虑所有效果和变换后缩放整个节点。[……]

但是,我如何才能在layoutBounds中包含比例因子

一些背景: 在下面的示例中,当按下按钮时,我希望GridPane也对HBox的缩放做出反应,而不必硬编码行约束的预编码高度

能够将缩放因子包含到layoutBounds中可能会起到作用,但也欢迎使用其他解决方案

导入javafx.application.application;
导入javafx.geometry.Pos;
导入javafx.scene.scene;
导入javafx.scene.control.Label;
导入javafx.scene.control.ToggleButton;
导入javafx.scene.layout.*;
导入javafx.stage.stage;
公共类ScalingStandlone扩展了应用程序{
私有VBox VBox=新的VBox();
private GridPane GridPane=new GridPane();
专用HBox HBox=新HBox();
private ToggleButton=新建ToggleButton(“单击缩放”);
私有标签firstRowLabel=新标签(“文本形式的某些内容”);
私有标签secondRowLabel=新标签(“用于缩放的某些内容”);
私有标签thirdRowLabel=新标签(“某些移动内容”);
公共静态void main(字符串[]args){
应用程序启动(args);
}
@凌驾
public void start(Stage)引发异常{
锚烷根=新锚烷();
AnchorPane.setTopAnchor(vBox,5.);
AnchorPane.setLeftAnchor(vBox,5.);
AnchorPane.setRightAnchor(vBox,5.);
root.autosize();
场景=新场景(根);
舞台布景(“网格规模演示”);
舞台布景宽度(400);
舞台设置高度(300);
舞台场景;
stage.show();
root.getChildren().add(vBox);
vBox.setAlignment(位置中心);
vBox.getChildren().add(gridPane);
vBox.getChildren().add(按钮);
vBox.setStyle(“-fx间距:15;”);
配置网格窗格(根);
按钮。设置操作(事件->{
hBox.setScaleY(按钮.isSelected()?2:1);
});
}
私有void配置GridPane(窗格根){
hBox.getChildren().add(secondRowLabel);
//造型//
firstRowLabel.setStyle(“-fx padding:5;”);
hBox.setStyle(“-fx背景色:#800000;-fx填充:5;”);
secondRowLabel.setStyle(“-fx文本填充:白色;-fx填充:5;”);
thirdRowLabel.setStyle(“-fx padding:5;”);
add(firstRowLabel,0,0);
添加(hBox,0,1);
add(thirdRowLabel,0,2);
setGridLinesVisible(true);
getColumnConstraints().add(newColumnConstraints());
gridPane.getColumnConstraints().get(0).setPercentWidth(100);
}
}
来自:

应用于组的任何变换、效果或状态都将应用于 那一组的所有孩子。这样的变换和效果将不会被忽略 包含在此组的布局边界中,但是如果变换和 效果直接设置在该组的子对象上,这些子对象将 包含在此组的布局边界中

(我的重点补充说)

因此,如果您只需将您的
HBox
包装在
组中
,您将达到预期效果:

    // gridPane.add(hBox, 0, 1);
    gridPane.add(new Group(hBox), 0, 1);

不要在计算机上测试这个,但是试着将
HBox
包装在
组中(仍然缩放
HBox
)哇。这是魔术!谢谢你,它很有魅力。你能给我解释一下为什么会有不同吗?本质上,一个
组的布局边界是在考虑了它们的变换后,其子级的累积边界。