2017-05-09 1 views
0

는 나는 당신이 나를 도울 수 있기를 바랍니다 약간의 문제가 있습니다 파란색 원은 128 * 128 이미지 뷰임을ImageView.getLayoutY() 잘못된 값입니까?

이 장면에서 Screenshot from my program

는,이 이미지 뷰가 HBox의 인을하고, HBox의가 중 VBOX에 , 그 다음에 VBox 정렬을 Pos.CENTER로 설정합니다.

괜찮 았지만 ImageView의 layoutY를 인쇄 할 때 61 대신에 0이 표시됩니다 (장면 높이가 250이므로 layoutY는 125 - 64 여야 함).

누군가 아이디어가 있습니까? 감사합니다. .

+0

왜 0이 아니어야한다고 생각하십니까? 'HBox'에 그 위에 무엇인가 있나요? –

+0

업데이트 됨, 아니요, 그 밖의 것이 있으면 ImageView, HBox 및 VBox 만 있습니다! – Dea5

+0

나는 HBox에서 ImageView를 번역하려고했는데, 296의 layoutX (장면의 너비는 720)를 올바르게 반환했지만 layoutY는 여전히 0입니다. – Dea5

답변

3

layoutXlayoutY 속성은 부모 내 노드의 레이아웃 위치를 결정합니다.이 경우 이미지의 레이아웃 위치는 HBox입니다. HBox에는 아무 것도 없기 때문에 이미지 뷰는 HBox의 좌표계에서 (0,0) 일 뿐이므로 layoutY 속성의 경우 0이됩니다.

(변환과 같은 변환은 레이아웃 좌표와 별도로 적용됩니다.이 방식으로 생각하면 노드가 배치되고 변환이 적용되어 최종 위치가 변경됩니다.) 변환은 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); 
    } 
} 

enter image description here

출력 :

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

정확히 내가 무엇을 찾고 있었습니까. – Dea5

관련 문제