2017-10-23 4 views
0

私は作業中のエディタのナビゲーション機能を実装しようとしています。これは、バックグラウンドをドラッグしてウィンドウ内を移動することができます。基本的にはOpen Mapsで移動できます。JavaFXドラッグ可能な背景 - カメラを使用する代わりに?

私の現在のアプローチは、表示されたオブジェクトがルートグループの子であるシーンのDragEvent-Listenersを介してシーンカメラを移動することです。

しかし、カメラを使用する必要のない別の方法が実装されているかどうかは疑問です。

+0

正確なユースケースに応じて、pannable 'ScrollPane'を使うことができます(スクロールバーのポリシーを' NEVER'に設定するだけです)。 –

+0

ありがとう、pannable正確に私が効率的に検索するために欠けていた単語のようです。 しかし、このアプローチでは、ペインのサイズが固定されているという問題が発生します。ルートノードとしてグループを使用すると、ペインの範囲内にオブジェクトがあるかどうか心配する必要がなくなります。 しかしこれは新しい質問です。 – MrMeeSeeks

+0

私はそれを理解していません。スクロールペインの内容として 'Group'を使うことができます。コンテンツのサイズが不明(または無限)の場合、スクロールペインは機能しません(正確なユースケースに依存していた理由です)。 –

答えて

0

簡単なテストとして、次の作品:

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

周りに移動する(トラックパッドのスクロールボタン/ホイールまたはスクロールジェスチャー)をマウスでスクロールし、新しいサークルを追加するためにダブルクリックします。

ここにいくつかの微妙な点があります。ペインは最初はシーンに合うようにサイズが設定されています。マウスの周りをスクロールすると、ペインの範囲外になります。ペインの範囲外でダブルクリックすると(パラメータが境界外にある新しいノードが追加される)、ペインはその時点で展開されて新しい子を含むようになります。

関連する問題