layoutX
및 layoutY
속성은 부모 내 노드의 레이아웃 위치를 결정합니다.이 경우 이미지의 레이아웃 위치는 HBox
입니다. HBox
에는 아무 것도 없기 때문에 이미지 뷰는 HBox
의 좌표계에서 (0,0)
일 뿐이므로 layoutY
속성의 경우 0
이됩니다.
(변환과 같은 변환은 레이아웃 좌표와 별도로 적용됩니다.이 방식으로 생각하면 노드가 배치되고 변환이 적용되어 최종 위치가 변경됩니다.) 변환은 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]
왜 0이 아니어야한다고 생각하십니까? 'HBox'에 그 위에 무엇인가 있나요? –
업데이트 됨, 아니요, 그 밖의 것이 있으면 ImageView, HBox 및 VBox 만 있습니다! – Dea5
나는 HBox에서 ImageView를 번역하려고했는데, 296의 layoutX (장면의 너비는 720)를 올바르게 반환했지만 layoutY는 여전히 0입니다. – Dea5