2014-05-06 46 views
-2

爲什麼translateX和translateY在我的場景中位置不好?我從座標x = 100 y = 200開始,實際座標y = -24.8 ...爲什麼?我的ImageView是什麼時候需要真實座標?JavaFX imageview實際座標translateX和translateY

primaryStage.setTitle("Title"); 
    Group root = new Group(); 
    Scene scene = new Scene(root, 800, 600, Color.WHITE); 

    // border.prefHeightProperty().bind(scene.heightProperty()); 
    //border.prefWidthProperty().bind(scene.widthProperty()); 
    Image im = new Image("Images/universe.jpg", 800, 600, true, true); 
    ImageView iv = new ImageView(im); 

    Image iv1 = new Image("Images/Asteroid.png", 60, 50, false, false); 
    ImageView iv2 = new ImageView(iv1); 
    iv2.setX(100); 
    iv2.setY(200); 

    Path p = new Path(); 
    p.getElements().add(new MoveTo(100, 200)); 
    p.getElements().add(new LineTo(200, 400)); 
    PathTransition pt = new PathTransition(Duration.millis(10000), p); 
    pt.setNode(iv2); 
    root.getChildren().add(iv2); 
    DoubleProperty xValue = new SimpleDoubleProperty(); 
    xValue.bind(iv2.translateXProperty()); 
    xValue.addListener(new ChangeListener() { 

     @Override 
     public void changed(ObservableValue ov, Object t, Object t1) { 
     // System.out.println((double) t1); 
     } 
    }); 
     DoubleProperty yValue = new SimpleDoubleProperty(); 
    yValue.bind(iv2.translateYProperty()); 
    yValue.addListener(new ChangeListener() { 

     @Override 
     public void changed(ObservableValue ov, Object t, Object t1) { 
      System.out.println((double) t1); 
     } 
    }); 
    pt.play(); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 

回答

1

我不知道什麼「真正的座標」的意思是:你想要哪個座標系(屏幕,場景,父母,節點......)?

您顯示的值是translateY屬性;這是節點垂直翻譯的數量。所以-24.8意味着它從原來的位置上移了24.8個單位。

您可以查看boundsInParent屬性,該屬性告訴您父級座標系中節點的邊界,包括任何變換(如翻譯)。 boundsInLocal屬性是節點在其自己的座標系中的邊界,並且不包含任何變換。

如果您想獲取場景或屏幕座標中節點的邊界,可以使用衆多localToScene(...)localToScreen(...)方法之一進行轉換。

更新:例如,跟蹤圖像的邊界在場景座標,你可以這樣做:

ChangeListener<Number> listener = new ChangeListener<Number>() { 
    @Override 
    public void changed(ObservableValue<? extends Number> ov, Number oldValue, Number newValue) { 
     Bounds boundsInScene = iv2.localToScene(iv2.getBoundsInLocal()); 
     double xInScene = boundsInScene.getMinX(); 
     double yInScene = boundsInScene.getMinY(); 
     // do something with values... 
    } 
}); 
iv2.translateXProperty().addListener(listener); 
iv2.translateYProperty().addListener(listener); 

閱讀Javadocs for Node瞭解更多詳情。

+0

我需要知道imageview x nad y的場景 – user3607293