【问题标题】:JavaFX imageview real coordinates translateX and translateYJavaFX imageview 实坐标 translateX 和 translateY
【发布时间】:2014-05-06 12:19:55
【问题描述】:

为什么 translateX 和 translateY 在我的场景中位置不好?我从坐标 x = 100 y = 200 开始,我的真实坐标 y = -24.8 ... 为什么?我的 ImageView 什么时候需要真正的坐标?

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

【问题讨论】:

    标签: javafx imageview transition coordinate


    【解决方案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了解更多详情。

    【讨论】:

    • 我需要知道现场的 imageview x nad y
    猜你喜欢
    • 2014-03-21
    • 2019-11-26
    • 2015-06-21
    • 1970-01-01
    • 2017-07-22
    • 1970-01-01
    • 2014-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多