JavaFX-ImageView和窗格的边框在ScrollPane内不能正确缩放

JavaFX-ImageView和窗格的边框在ScrollPane内不能正确缩放,image,javafx,javafx-8,scale,zooming,Image,Javafx,Javafx 8,Scale,Zooming,为了实现类似于小地图的功能,我使用了StackPane在ImageView上分层窗格。我将StackPane的缩放x和y属性绑定到滑块上,以实现缩放效果。我在窗格中添加了一些圆圈对象。当然,这些圆也应该是可缩放的(它们是可缩放的),但在这种情况下,更重要的是,当缩放发生时,它们应保持在相对位置。下图显示了到目前为止GUI的外观 到目前为止,我已经区分了两个有问题的案例 问题A-位置正确但“超出范围” 在这个更简单的例子中,除了放大图像似乎使其超出StackPane的范围之外,一切都正常。因此

为了实现类似于小地图的功能,我使用了
StackPane
ImageView
上分层
窗格。我将
StackPane
的缩放x和y属性绑定到
滑块上,以实现缩放效果。我在
窗格
中添加了一些
圆圈
对象。当然,这些圆也应该是可缩放的(它们是可缩放的),但在这种情况下,更重要的是,当缩放发生时,它们应保持在相对位置。下图显示了到目前为止GUI的外观

到目前为止,我已经区分了两个有问题的案例


问题A-位置正确但“超出范围”

在这个更简单的例子中,除了放大图像似乎使其超出
StackPane
的范围之外,一切都正常。因此,您无法再滚动到图像的边框。查看下一个屏幕截图,了解我的意思


问题B-“在边界内”但位置不正确

为了使
StackPane
适当增长,我将其大小属性绑定到与图像大小相乘的缩放因子。但是,我很确定这种方法会在某种程度上破坏底层的坐标结构,因为现在圆的“离开”位置的比例因子大于1。上述行为在最后一个屏幕截图中进行了描述


我在下面添加了我的代码。任何帮助都将不胜感激:)


ScrollPane
使用未修改的布局边界来确定内容大小。这不包括缩放变换。要防止内容超出可滚动区域,请将缩放的节点包装在
组中

按如下方式修改
滚动窗格
创建:

ScrollPane scrollPane = new ScrollPane(new Group(stackPane));
并删除与
prefWidth
/
prefHeight
的绑定,即删除以下行:

stackPane.prefWidthProperty().bind(zoomSlider.valueProperty().multiply(backgroundImage.getWidth()));
stackPane.prefHeightProperty().bind(zoomSlider.valueProperty().multiply(backgroundImage.getHeight()));

我已经为此痛击了两天多了。非常感谢。
stackPane.prefWidthProperty().bind(zoomSlider.valueProperty().multiply(backgroundImage.getWidth()));
stackPane.prefHeightProperty().bind(zoomSlider.valueProperty().multiply(backgroundImage.getHeight()));