我正在开发一个程序,在该程序中我正在学习有关在JavaFX中缩放和移动对象的信息。对于我的程序,我使用Group
,在Group
中,我有两个Rectangle
,还有一些Sliders
,可以同时更改两个Rectangle
的属性。
发生的问题是,当我在程序中更改translateX
的{{1}}或translateY
时,保留父{{的Rectangle
和ScaleX
1}}而不是1,它也会更改另一个ScaleY
的位置,但是当比例为1时不会发生此问题。
这是我的程序:
在我的程序中,我有两个分别称为Group
和Rectangle
的{{1}}和我正在使用的Rectagle
和a
和{{ 1}}和b
分别更改Rectagles Slider
和aTranslateX
的translateX和translateY。我正在使用另一个名为aTranslateY
的{{1}}来更改名为bTranslateX
的组的bTranslateY
和a
,其中包含b
和Slider
。同样,当我更改矩形scale
和scaleX
的转换属性并保持scaleY
的比例(group
和a
)时,不会发生此问题,但是当我更改时它们的矩形b
和a
的平移属性保持缩放,而不是一个矩形的一个变化平移属性也沿相反的变化方向更改另一个矩形的位置。
b
如何解决此问题,或者在组大小不是默认值的情况下更改任何对象的平移属性的正确方法是什么?
答案 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());