尝试定位图像时,setX和setY无法正常工作

时间:2017-03-21 22:40:20

标签: java image javafx imageview javafx-2

我在使用setX上的setX和setY定位我的JavaFX程序中的图像时遇到问题。我不确定是什么问题?感谢任何帮助!
这是我的代码:

        Image rocket2 = new Image("img/Rocket.png");
        ImageView iv1 = new ImageView(rocket2);
        iv1.setX(60);
        iv1.setY(44);

        Image rocket1 = new Image("img/Rocket.png");
        ImageView iv2 = new ImageView(rocket1);
        iv2.setX(5);
        iv2.setY(16);

        Image background = new Image("img/space.png");
        ImageView iv3 = new ImageView(background);

        StackPane root = new StackPane();
        root.getChildren().addAll(iv3, iv2, iv1);
        Scene scene = new Scene(root, 300, 300);
        scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
        primaryStage.setScene(scene);
        primaryStage.setResizable(false);
        primaryStage.setTitle("Space stuff");
        primaryStage.show();

我怀疑是因为我设置了背景图片而出了问题 img here on what's happening

3 个答案:

答案 0 :(得分:3)

StackPane替换Pane可以解决问题。

答案 1 :(得分:2)

如果您想明确定义其布局位置(setXsetY),请勿将商品放在StackPane中。 StackPane是托管布局窗格。它将自动设置添加到其中的项目的位置(默认是将所有内容置于StackPane内的另一个中心)。

而是使用PaneGroup,它们不是托管布局窗格,允许您根据需要在窗格中布置内容。

要在窗格内布置您的内容,您可以使用setLayoutXsetLayoutY而不是setX和setY,虽然我猜setX和setY也应该有效(我以前从未在ImageView上使用过它们) )。

Pavlo,我在输入时已经创建了一个答案(所以这个答案是重复的),但我会留下这个,因为它增加了一些解释。

答案 2 :(得分:1)

如果您因任何原因想要在StackPane中放置项目,可以使用setTranslateXsetTranslateY。 Theese方法在StackPane完成布局之后设置x和y值,因此根据StackPane为其子项使用的对齐方式,您将拥有不同的起始位置。