簡単なテストとして、次の作品:
import javafx.application.Application;
import javafx.geometry.Point2D;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
public class InfinitePanning extends Application {
@Override
public void start(Stage primaryStage) {
Pane drawingPane = new Pane();
drawingPane.setStyle("-fx-background-color: white;");
Scene scene = new Scene(drawingPane, 800, 800, Color.WHITE);
scene.setOnScroll(e -> {
drawingPane.setTranslateX(drawingPane.getTranslateX() + e.getDeltaX());
drawingPane.setTranslateY(drawingPane.getTranslateY() + e.getDeltaY());
});
scene.setOnMouseClicked(e -> {
if (e.getClickCount() == 2) {
Point2D center = drawingPane.sceneToLocal(new Point2D(e.getX(), e.getY()));
Circle c = new Circle(center.getX(), center.getY(), 25, Color.CORNFLOWERBLUE);
drawingPane.getChildren().add(c);
}
});
Circle c = new Circle(50, 50, 25, Color.CORNFLOWERBLUE);
drawingPane.getChildren().add(c);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
周りに移動する(トラックパッドのスクロールボタン/ホイールまたはスクロールジェスチャー)をマウスでスクロールし、新しいサークルを追加するためにダブルクリックします。
ここにいくつかの微妙な点があります。ペインは最初はシーンに合うようにサイズが設定されています。マウスの周りをスクロールすると、ペインの範囲外になります。ペインの範囲外でダブルクリックすると(パラメータが境界外にある新しいノードが追加される)、ペインはその時点で展開されて新しい子を含むようになります。
正確なユースケースに応じて、pannable 'ScrollPane'を使うことができます(スクロールバーのポリシーを' NEVER'に設定するだけです)。 –
ありがとう、pannable正確に私が効率的に検索するために欠けていた単語のようです。 しかし、このアプローチでは、ペインのサイズが固定されているという問題が発生します。ルートノードとしてグループを使用すると、ペインの範囲内にオブジェクトがあるかどうか心配する必要がなくなります。 しかしこれは新しい質問です。 – MrMeeSeeks
私はそれを理解していません。スクロールペインの内容として 'Group'を使うことができます。コンテンツのサイズが不明(または無限)の場合、スクロールペインは機能しません(正確なユースケースに依存していた理由です)。 –