2016-12-04 66 views
0

我在一個窗格上繪製不同大小的地圖。有些看起來體面,其他人只是呈現一個小形狀,你必須放大以獲得它的大小。我希望這些地圖在每次初始化時都顯示大致相同的尺寸(所以我不必手動縮放每個地圖)。我有Point2D積分minmax值分別爲xy他們被繪製在窗格上,同樣適用於地圖(這是多邊形的Group)。如何設置minPointPaneminPointGroup之間的距離?還是我以錯誤的方式接近這個?JavaFX將不同大小的節點縮放到相同的大小

編輯:

public void setDistance(Group map, Point2D paneSize, Point2D mapSize){ 
    //um diese distance verschieben, if distance > 10px (scale) 
    double d = paneSize.distance(mapSize); 
    double scale = ?? 
    map.setScaleX(scale); 
    map.setScaleY(scale); 
} 

這就是我打算做下去,不知道盡管這一條線。

回答

0

要將節點縮放到父節點的大小,大小的差異並不重要。重要的是大小的商數,更確切地說是高度和寬度的商數的最小值(假設你想完全在一個方向上填充父項)。

例子:

@Override 
public void start(Stage primaryStage) { 
    Text text = new Text("Hello World!"); 

    Pane root = new Pane(); 
    root.getChildren().add(text); 
    InvalidationListener listener = o -> { 
     Bounds rootBounds = root.getLayoutBounds(); 
     Bounds elementBounds = text.getLayoutBounds(); 

     double scale = Math.min(rootBounds.getWidth()/elementBounds.getWidth(), 
       rootBounds.getHeight()/elementBounds.getHeight()); 
     text.setScaleX(scale); 
     text.setScaleY(scale); 

     // center the element 
     elementBounds = text.getBoundsInParent(); 
     double cx = (elementBounds.getMinX() + elementBounds.getMaxX())/2; 
     double cy = (elementBounds.getMinY() + elementBounds.getMaxY())/2; 
     text.setTranslateX(rootBounds.getWidth()/2 - cx + text.getTranslateX()); 
     text.setTranslateY(rootBounds.getHeight()/2 - cy + text.getTranslateY()); 
    }; 

    root.layoutBoundsProperty().addListener(listener); 
    text.layoutBoundsProperty().addListener(listener); 

    Scene scene = new Scene(root); 

    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 
+0

謝謝你,那個作品! – dot