我有一个小问题,希望您能为我提供帮助:

java - ImageView.getLayoutY()的值错误?-LMLPHP

在此场景中,那个蓝色圆圈是一个128x128 ImageView,该ImageView在HBox中,而HBox在VBox中,然后将VBox对齐方式设置为Pos.CENTER;

一切都很好,但是当我打印ImageView的layoutY时,它说的是0而不是61(场景的高度是250,所以layoutY应该是125-64)。

有人有主意吗?
谢谢。

最佳答案

layoutXlayoutY属性确定节点在其父节点内的布局位置:在这种情况下,图像在HBox中的布局位置。由于HBox中没有其他内容,因此图像视图将位于(0,0)坐标系中的HBox处,因此对于0属性,您只会得到layoutY

(另请注意,变换(例如平移)的应用与布局坐标无关-如果您想这样想,则对节点进行布局,然后应用变换,这将改变其最终位置。因此,变换不会修改layoutXlayoutY属性。)

若要获取节点在场景中的位置,可以使用localToScene变换将节点自身​​坐标系中的点转换为场景坐标系中的点。因此,要获取场景中图像视图的左上角((0,0))的位置,您可以

image.localToScene(new Point2D(0, 0))


这是完整的SSCCE(仅使用普通的Region代表图像视图):

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Point2D;
import javafx.geometry.Pos;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.layout.Background;
import javafx.scene.layout.BackgroundFill;
import javafx.scene.layout.CornerRadii;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Region;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

public class BoundsInSceneExample extends Application {

    @Override
    public void start(Stage primaryStage) {
        HBox hbox = new HBox();
        Node image = createImage();
        hbox.getChildren().add(image);
        VBox root = new VBox();
        root.setAlignment(Pos.CENTER);
        root.getChildren().add(hbox);

        Scene scene = new Scene(root, 250, 250);

        // force the layout, so layout computations are performed:
        root.layout();

        System.out.printf("Layout coordinates: [%.1f, %.1f]%n", image.getLayoutX(), image.getLayoutY());
        Point2D sceneCoords = image.localToScene(new Point2D(0,0));
        System.out.printf("Scene coordinates: [%.1f, %.1f]%n", sceneCoords.getX(), sceneCoords.getY());

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

    private Node createImage() {
        Region region = new Region();
        region.setMinSize(128, 128);
        region.setPrefSize(128, 128);
        region.setMaxSize(128, 128);
        region.setBackground(new Background(new BackgroundFill(Color.BLUE, CornerRadii.EMPTY, Insets.EMPTY)));
        return region ;
    }

    public static void main(String[] args) {
        launch(args);
    }
}


java - ImageView.getLayoutY()的值错误?-LMLPHP

输出:

Layout coordinates: [0.0, 0.0]
Scene coordinates: [0.0, 61.0]

关于java - ImageView.getLayoutY()的值错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43880493/

10-09 05:02