16

スクロール イベントでペイン内のすべてのノードをスケーリングしたい。

私がこれまでに試したこと:

  1. scaleX または scaleY を実行すると、ペインの境界がそれぞれスケーリングされます (Pane style を設定すると表示されます-fx-border-color: black;)。したがって、ペインの境界から来ていない場合、すべてのイベントが開始されるわけではないため、すべてが必要です。ここに画像の説明を入力

  2. 次のステップでは、各ノードをスケーリングしようとしましたが、次のように非常に悪いことがわかりました-(線がポイントを介して伸びています)。または、反対側にスクロールすると、少なくなりますここに画像の説明を入力

  3. 私が試した別の方法は、ノードのポイントをスケーリングすることでした。より良いですが、私はそれが好きではありません。point.setScaleX(point.getScaleX()+scaleX)y およびその他のノードについては and のように見え ます。

4

2 に答える 2

3

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 の方がはるかに簡単です。

于 2015-10-22T09:25:49.813 に答える