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()));