2015-10-08 97 views
0

我hava a Pane它是可縮放的。我想分別縮放這個Pane中的所有孩子。孩子可以動態添加,所以一旦添加了新的孩子,我正在考慮將孩子的比例屬性綁定到父母的比例屬性,但我不知道如何才能做到這一點。一旦添加新的孩子,JavaFX會將孩子的財產綁定到其父母的財產

我現在只要窗格比例縮放所有的孩子:

public class ZoomableCanvas extends Pane { 

    DoubleProperty scale = new SimpleDoubleProperty(1.0); 

    public ZoomableCanvas() { 
     scaleXProperty().bind(scale); 
     scaleYProperty().bind(scale); 
    } 

    public double getScale() { 
     return scale.get(); 
    } 

    public void setScale(double scale) { 
     this.scale.set(scale); 
     for (javafx.scene.Node child : getChildren()) { 
      child.setScaleX(scale); 
      child.setScaleY(scale); 
     } 
    } 

    public void setPivot(double x, double y) { 
     setTranslateX(getTranslateX() - x); 
     setTranslateY(getTranslateY() - y); 
    } 
} 

但必須有一個更優雅的方式。我怎樣才能聽取孩子的加入,然後綁定這個屬性?

回答

1

只是觀察患兒名單:

public class ZoomableCanvas extends Pane { 

    DoubleProperty scale = new SimpleDoubleProperty(1.0); 

    public ZoomableCanvas() { 
     scaleXProperty().bind(scale); 
     scaleYProperty().bind(scale); 

     getChildren().addListener((Change<? extends Node> c) -> { 
      while (c.next()) { 
       if (c.wasAdded()) { 
        for (Node child : c.getAddedSubList()) { 
         child.scaleXProperty().bind(scale); 
         child.scaleYProperty().bind(scale); 
        } 
       } 
       if (c.wasRemoved()) { 
        for (Node child : c.getRemoved()) { 
         child.scaleXProperty().unbind(); 
         child.scaleYProperty().unbind(); 
        } 
       } 
      } 
     }); 
    } 

    public double getScale() { 
     return scale.get(); 
    } 

    public void setScale(double scale) { 
     this.scale.set(scale); 
    } 

    public void setPivot(double x, double y) { 
     setTranslateX(getTranslateX() - x); 
     setTranslateY(getTranslateY() - y); 
    } 
} 
相關問題