我有一点问题,希望你能帮助我:
在这个场景中,那个蓝色圆圈是128x128 ImageView,这个ImageView在HBox中,而HBox在VBox中,然后我将VBox对齐设置为Pos.CENTER;
一切都还可以,但是当我打印ImageView的layoutY时,它会显示0而不是61(场景的高度为250,所以layoutY应该是125 - 64);
有人有想法吗? 感谢。
答案 0 :(得分:3)
layoutX
和layoutY
属性确定其父节点内的节点布局位置:在本例中,HBox
中图像的布局位置。由于HBox
中没有其他内容,因此图片视图将位于(0,0)
坐标系中的HBox
,因此您只需获取0
layoutY
{1}}属性。
(另请注意,转换,例如翻译,独立于布局坐标应用 - 如果您想以这种方式考虑,节点布局,则应用转换将改变其最终位置。所以转换请勿修改layoutX
和layoutY
属性。)
要获取场景中节点的位置,可以使用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);
}
}
输出:
Layout coordinates: [0.0, 0.0]
Scene coordinates: [0.0, 61.0]