JavaFX为什么ScrollPane需要两个组包装来重新计算其scollbars?

时间:2015-06-14 22:10:16

标签: java user-interface javafx scrollpane

在此示例中,在FXML文件的ScrollPane上设置地图图像。

http://hg.openjdk.java.net/openjfx/8u-dev/rt/rev/36a59c629605

图像可通过其他方法调整大小,这些方法可更改包含图像的组缩放 - zoomGroup。

+    private void zoom(double scaleValue) {
+//    System.out.println("airportapp.Controller.zoom, scaleValue: " + scaleValue);
+        double scrollH = map_scrollpane.getHvalue();
+        double scrollV = map_scrollpane.getVvalue();
+        zoomGroup.setScaleX(scaleValue);
+        zoomGroup.setScaleY(scaleValue);
+        map_scrollpane.setHvalue(scrollH);
+        map_scrollpane.setVvalue(scrollV);
+    }

但是为了确保ScrollPane重新计算其滚动条(因此可滚动区域有效地改变以包括任何比例的整个图像),包装Image的组zoomGroup然后被包装在另一个group,contentGroup中,它被设置为ScrollPane的内容。

+        // Wrap scroll content in a Group so ScrollPane re-computes scroll bars
+        Group contentGroup = new Group();
+        zoomGroup = new Group();
+        contentGroup.getChildren().add(zoomGroup);
+        zoomGroup.getChildren().add(map_scrollpane.getContent());
+        map_scrollpane.setContent(contentGroup);

有人可以解释为什么这是必要的吗?

这是文件附带的视频: https://www.youtube.com/watch?v=ij0HwRAlCmo

0 个答案:

没有答案