生成节点的预设位置

时间:2017-02-04 21:37:29

标签: java javafx position nodes

我正在尝试制作应用程序,在相当大的窗格(滚动窗格的子窗口)上生成新的可拖动节点,但此节点应该在屏幕的中心生成。

问题是:是否有任何方法可以预先设置这些新图像视图的X,Y坐标?

例如:

 button.setOnAction(new EventHandler<ActionEvent>() {
    @Override public void handle(ActionEvent e) {
    Bounds bounds = scrollPane.getBoundsInLocal();
    Bounds screenBounds = scrollPane.localToScreen(bounds);

    int mX = (int) screenBounds.getMinX();
    int mY = (int) screenBounds.getMinY();

    Rectangle2D primScreenBounds = Screen.getPrimary().getVisualBounds();
    int x = (int) ((primScreenBounds.getWidth() - mX) /4);
    int y = (int) ((primScreenBounds.getHeight() - mY) /4);   

    /*
    System.out.println("X coords:" +x);
    System.out.println("Y coords:" +y);
    */

    pane.getChildren().addAll(new ImageView(imgvw.getImage()));
    //somehow set coordinates of new ImageView

    }
 });    

2 个答案:

答案 0 :(得分:0)

这可能取决于放置ImageView的父级,但一般情况下,您应该能够使用Node定位Region#positionInArea()Region是超类Parent)。请注意,这是一种受保护的方法,这意味着您可能想要创建自己的父级(例如,通过扩展StackPane)。

话虽如此,有很多Parent Node个,每个都提供了自己独特的行为。尝试确保在创建自己的实现之前无法使用任何这些行为来实现所需的行为。 (因为你没有指定任何定位行为,很难提出建议)

答案 1 :(得分:0)

您设置位置的方式取决于您使用的布局。但假设您使用Pane,则可以使用

  • layoutXlayoutY
  • translateXtranslateY
ImageView iv = new ImageView(imgvw.getImage());
iv.setLayoutX(x);
iv.setLayoutY(y);
pane.getChildren().add(iv);

其他布局,例如StackPane会自动设置layoutXlayoutY。在这种情况下,您可以将managed设置为false

iv.setManaged(false);

或使用适当的参数作为布局类型。