2015-10-23 4 views
0

Y a-t-il un moyen d'écouter les changements de transformation? Je voudrais être averti quand, par exemple, un cube a tourné. Surtout je suis intéressé par getLocalToSceneTransform.Écoutez les changements de transformation

Voici mon essai:

@Override 
public void start(Stage primaryStage) throws Exception { 
    final Group root = new Group(); 
    final Scene scene = new Scene(root); 

    final Box cube = new Box(1, 1, 1); 
    cube.setRotationAxis(Rotate.Y_AXIS); 
    cube.setMaterial(new PhongMaterial(Color.RED)); 
    root.getChildren().add(cube); 
    cube.getLocalToSceneTransform().addEventHandler(TransformChangedEvent.TRANSFORM_CHANGED, (e) -> { 
     // never get called 
     System.out.println("Transformation has changed"); 
    }); 

    final Camera camera = new PerspectiveCamera(true); 
    camera.setTranslateZ(-4); 
    scene.setCamera(camera); 

    final Timeline turnCube = new Timeline(); 
    turnCube.getKeyFrames().add(new KeyFrame(Duration.seconds(0), new KeyValue(cube.rotateProperty(), 0))); 
    turnCube.getKeyFrames().add(new KeyFrame(Duration.seconds(5), new KeyValue(cube.rotateProperty(), 360))); 
    turnCube.setCycleCount(Timeline.INDEFINITE); 
    turnCube.play(); 

    primaryStage.setWidth(1024); 
    primaryStage.setHeight(768); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 

Alors que le cube est tourné le EventHandler se jamais appelé.

Répondre

0

Vous pouvez ajouter un élément changeListener au localToSceneTransformProperty() du cube pour être averti lorsque le cube est pivoté.

cube.localToSceneTransformProperty().addListener((value, oldValue, newValue) -> { 
    System.out.println("Transformation has changed"); 
});