为什么在更改组的比例后更改JavaFX组中一个Shape的转换属性会影响其他Shape

时间:2019-01-24 10:43:23

标签: java javafx javafx-11

我正在开发一个程序,在该程序中我正在学习有关在JavaFX中缩放和移动对象的信息。对于我的程序,我使用Group,在Group中,我有两个Rectangle,还有一些Sliders,可以同时更改两个Rectangle的属性。

发生的问题是,当我在程序中更改translateX的{​​{1}}或translateY时,保留父{{的RectangleScaleX 1}}而不是1,它也会更改另一个ScaleY的位置,但是当比例为1时不会发生此问题。

这是我的程序:

在我的程序中,我有两个分别称为GroupRectangle的{​​{1}}和我正在使用的Rectaglea和{{ 1}}和b分别更改Rectagles SlideraTranslateX的translateX和translateY。我正在使用另一个名为aTranslateY的{​​{1}}来更改名为bTranslateX的组的bTranslateYa,其中包含bSlider 。同样,当我更改矩形scalescaleX的转换属性并保持scaleY的比例(groupa)时,不会发生此问题,但是当我更改时它们的矩形ba的平移属性保持缩放,而不是一个矩形的一个变化平移属性也沿相反的变化方向更改另一个矩形的位置。

b

如何解决此问题,或者在组大小不是默认值的情况下更改任何对象的平移属性的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

Group在计算子项的大小时包括子项的转换。由于用于通过scaleX / scaleY属性缩放的枢轴点是节点的中心,因此更改平移属性会导致枢轴点的位置发生更改,从而导致组中所有子级的移动。如果您不希望这样做,请使用Pane(在尺寸计算中不包含变换),而不是Group,或使用以Scale为中心的(0,0)变换点而不是scaleX / scaleY属性:

Scale groupScale = new Scale();
group.getTransforms().add(groupScale);
groupScale.xProperty().bind(scale.valueProperty());
groupScale.yProperty().bind(scale.valueProperty());