gpt4 book ai didi

java - 在不使用 BorderPane 的情况下设置节点的对齐方式?

转载 作者:行者123 更新时间:2023-12-02 01:23:04 27 4
gpt4 key购买 nike

所以我有一个文本节点,我想将其放置在场景的右上角。大多数方法都声明要使用 BorderPane,但在我的情况下,场景中的一些其他节点正在使用 Pane,它也是我的根 Pane ,因此明显的解决方法是添加将您想要添加到 BorderPane 的节点并将 BorderPane 添加到根 Pane

但是BorderPane似乎与Pane不兼容。也就是说,BorderPane 的所有节点都不会显示。此外,BorderPane 也不支持基于平移 X 和 Y 来定位节点。(即 setLayoutX() 不起作用。)因此,我什至无法使我的根 PaneBorderPane

这是我尝试过的:

public class foo {
private Pane root = new Pane();
private BorderPane borderPane = new BorderPane();
private Scene scene = new Scene(root, 1366, 768);

public foo(){
Text text1 = new Text("test1");
text1.setLayoutX(11); // Ignore this if you want.
test1.setLayoutY(11);

Text text2 = new Text("test2");

root.getChildren().add(test1);
borderPane.setRight(text2);
root.getChildren().add(borderPane);

// Display the scene on a stage.
}
}

这里只显示了test1,而没有看到test2。有没有办法可以在不使用 BorderPane 的情况下将此文本放置在屏幕的右上角?

最佳答案

Pane 只是将子级的大小调整为首选大小。由于您仅将 Text 节点放置为 BorderPane 的子节点,因此其首选大小就是子节点的大小。

在这种情况下,我建议使用不同的布局,例如

堆栈 Pane

这允许您使用 StackPane.setAlignment(child, newAlignment); 来设置布局内节点的对齐方式。缺点是设置绝对位置需要您使子级成为非托管(有一些副作用)或指定 4 个值(一个 Insets 实例)作为边距。

Text text1 = new Text("test1");
StackPane.setMargin(text1, new Insets(11, 0, 0, 11));
StackPane.setAlignment(text1, Pos.TOP_LEFT);

Text text2 = new Text("test2");
StackPane.setAlignment(text2, Pos.TOP_RIGHT);

root = new StackPane(text1, text2);

锚定 Pane

这不允许中心对齐,但它允许您使用 layoutXlayoutY 设置绝对位置,就像在 Pane 中所做的那样。您可以设置 anchor 属性来指定子元素距顶部、左侧、右侧和/或底部的距离:

Text text1 = new Text("test1");
text1.setLayoutX(11);
text1.setLayoutY(11);

Text text2 = new Text("test2");
AnchorPane.setRightAnchor(text2, 0d);
AnchorPane.setTopAnchor(text2, 0d);

root = new AnchorPane(text1, text2);

关于java - 在不使用 BorderPane 的情况下设置节点的对齐方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57347276/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com