生成节点的预设位置
Pre-set position of spawned node
我正在尝试制作在相当大的窗格(它是滚动窗格的子项)上生成新的可拖动节点的应用程序,但该节点应该在屏幕中央生成。
问:有什么方法可以预先设置这些新的imageviews的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
}
});
这可能取决于放置 ImageView
的父级,但通常您应该能够将 Node
与 Region#positionInArea()
一起放置(Region
是Parent
的超类)。请注意,这是一个受保护的方法,这意味着您可能想要创建自己的父级(例如,通过扩展 StackPane
)。
也就是说,有很多 Parent
Node
,每个都提供自己独特的行为。在创建您自己的实现之前,请尝试确保使用其中任何一个都无法实现所需的行为。 (而且由于您没有指定任何定位行为,因此很难提出建议)
您设置位置的方式取决于您使用的布局。但是假设你使用 Pane
,你可以使用
layoutX
和layoutY
或
translateX
和 translateY
ImageView iv = new ImageView(imgvw.getImage());
iv.setLayoutX(x);
iv.setLayoutY(y);
pane.getChildren().add(iv);
其他布局,例如StackPane
自动设置 layoutX
和 layoutY
。在这种情况下,您可以将 managed
设置为 false
iv.setManaged(false);
或为布局类型使用适当的参数。
我正在尝试制作在相当大的窗格(它是滚动窗格的子项)上生成新的可拖动节点的应用程序,但该节点应该在屏幕中央生成。
问:有什么方法可以预先设置这些新的imageviews的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
}
});
这可能取决于放置 ImageView
的父级,但通常您应该能够将 Node
与 Region#positionInArea()
一起放置(Region
是Parent
的超类)。请注意,这是一个受保护的方法,这意味着您可能想要创建自己的父级(例如,通过扩展 StackPane
)。
也就是说,有很多 Parent
Node
,每个都提供自己独特的行为。在创建您自己的实现之前,请尝试确保使用其中任何一个都无法实现所需的行为。 (而且由于您没有指定任何定位行为,因此很难提出建议)
您设置位置的方式取决于您使用的布局。但是假设你使用 Pane
,你可以使用
layoutX
和layoutY
或translateX
和translateY
ImageView iv = new ImageView(imgvw.getImage());
iv.setLayoutX(x);
iv.setLayoutY(y);
pane.getChildren().add(iv);
其他布局,例如StackPane
自动设置 layoutX
和 layoutY
。在这种情况下,您可以将 managed
设置为 false
iv.setManaged(false);
或为布局类型使用适当的参数。