尝试定位图像时 setX 和 setY 不起作用
Posted
技术标签:
【中文标题】尝试定位图像时 setX 和 setY 不起作用【英文标题】:setX and setY not working when trying to position images 【发布时间】:2017-08-13 20:26:51 【问题描述】:我在使用 ImageView 上的 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
【问题讨论】:
【参考方案1】:如果您想明确定义项目的布局位置(setX
和 setY
),请不要将项目放在 StackPane 中。 StackPane 是托管布局窗格。它将自动设置添加到它的项目的位置(默认是在 StackPane 中将所有内容置于另一个之上)。
请改用Pane 或Group,它们不是托管布局窗格,允许您根据需要在窗格中布局内容。
要在窗格内布局内容,您可以使用 setLayoutX
和 setLayoutY
而不是 setX 和 setY,但我猜 setX 和 setY 也应该可以工作(我以前从未在 ImageView 上使用过它们)。
Pavlo,在我输入这个时已经创建了一个答案(所以这个答案是重复的),但我会留下这个,因为它增加了一些解释。
【讨论】:
【参考方案2】:将StackPane
替换为Pane
应该可以解决问题。
【讨论】:
【参考方案3】:但是,如果您出于某种原因想要在 StackPane 中定位项目,您可以使用 setTranslateX 和 setTranslateY。这些方法会在 StackPane 完成布局后设置 x 和 y 值,因此您将拥有不同的起始位置,具体取决于 StackPane 为其子级使用的对齐方式。
【讨论】:
太棒了,这有助于使堆栈窗格中的一个节点保持居中,而另一个节点则略微半开。很高兴我没有错过这个答案!以上是关于尝试定位图像时 setX 和 setY 不起作用的主要内容,如果未能解决你的问题,请参考以下文章