zoomPane の元のコンテンツのサイズが既にビューポートよりも大きい場合、jewelsea からの回答には 1 つの問題があります。その場合、次のコードは機能しません。zoomPane.setMinSize(newValue.getWidth(), newValue.getHeight());
その結果、ズームアウトすると、コンテンツが中央に配置されなくなります。
この問題を解決するには、zoomPane と ScrollPane の間に別の StackPane を作成する必要があります。
// Create a zoom pane for zoom in/out
final StackPane zoomPane = new StackPane();
zoomPane.getChildren().add(group);
final Group zoomContent = new Group(zoomPane);
// Create a pane for holding the content, when the content is smaller than the view port,
// it will stay the view port size, make sure the content is centered
final StackPane canvasPane = new StackPane();
canvasPane.getChildren().add(zoomContent);
final Group scrollContent = new Group(canvasPane);
// Scroll pane for scrolling
scroller = new ScrollPane();
scroller.setContent(scrollContent);
そして、viewportBoundsProperty リスナーで、zoomPane を canvasPane に変更します。
// Set the minimum canvas size
canvasPane.setMinSize(newValue.getWidth(), newValue.getHeight());
JavaFx は複雑すぎて拡大/縮小できません。同じ効果を得るには、WPF の方がはるかに簡単です。