我刚刚开始学习JavaFX来构建桌面应用程序,目前还没有任何个人培训。现在关于这个问题,我正在尝试做一个自定义布局,它的大小取决于它的孩子的整体大小。我的问题是在计算高度和宽度时得到每个孩子的尺寸。这里,我使用< code>getLayoutBounds()方法来检索孩子的尺寸,但是在我的例子中,它总是返回0:
@Override
protected double computePrefWidth(double height) {
for (int i = 0; i < getChildren().size(); i++) {
Node node = getChildren().get(i);
System.out.println(node.getLayoutBounds().getWidth()); // returns 0
}
}
所以我想这是关于布局传递的(比如说,孩子还没有布局)。但是不管怎样,如果这里是不是这样,我怎样才能得到节点的确切大小,包括插页、填充等?谢谢你的所有回答。
我最终使用了预维数()
和预重()
方法,这是正确的答案。这是我使用 getWidth()
和 getHeight()
方法的错误,因为我认为 prefWidth()
方法不包括填充/插入。另一方面,getWidth()
实际上依赖于布局传递,这意味着它返回 0,因为节点(子节点)尚未在阶段中布局,这就是 @ᴇʟᴇvᴀтᴇ 在下面回答的是正确的。
因此,为了其他遇到这种情况的人,你可能想读一下这篇文章,最后,如果你没有用< code>pref、< code>min、< code>max方法得到预期的结果,请确保所有的CSS样式表都被正确应用(见下面@fabian和@SilasGyeme的回答)。
设置设置子项的首选项宽度,然后使用获取首选项宽度访问它们
< code>getWidth()返回< code>0,直到显示舞台并布局节点。之后,它们将具有非零宽度。
使用< code>runLater()运行布局后操作。
Platform.runLater(() -> {
// TODO: Calculations based on laid out sizes
});
如果您实现了自定义Area
(或间接子类),则确定子类的大小是您的类的工作。
computePrefWidth
等。需要考虑子节点的大小边界,并根据这些值确定自己的首选大小。对于这些类型的计算,您应该使用minWidth
、minHeight
、prefWidth
、prefHeight
、maxWidth
和maxHeight
Node的方法。
@Override
protected double computePrefWidth(double height) {
double size = 0;
for (Node child : getManagedChildren()) {
double pW = child.prefWidth(height);
if (pW > size) {
size = pW;
}
}
// TODO: consider insets ect...
return size;
}
上述确定首选项大小的方法适用于VBox
之类的情况。
如何在JavaFX中获取节点的高度或首选高度,我有3个,我想将节点添加到最自由的面板中,例如: 在本例中,最自由的是,我使用此方法计算最自由的窗格: 此方法仅在我同时添加1个元素时有效。但如果我当时添加更多元素: 方法返回相同的索引。这是因为新节点在本地还没有高度。 因此这行: 将返回带有新节点的。 有人知道如何获得节点的高度吗? Node的扩展 方法addElement()在myPane: 假设
问题内容: 如何在JavaFX中获取节点的高度或首选节点的高度,我有3个节点,我想将节点添加到最自由的面板中,例如: 在这种情况下,最自由的是,我使用这种方法计算出最自由的窗格: 仅当我一次添加1个元素时,此方法才有效。但是如果我一次添加更多元素: 该方法getFreerColumnIndex返回相同的索引。这是因为新节点在本地还没有高度。 所以这行: 将0与新节点一起返回。 有谁知道如何获得节点
问题内容: 如何在JavaFX中获取节点的高度或首选节点的高度,我有3个节点VBox,我想将节点添加到最自由的面板中,例如: 在这种情况下,最免费的是VBoxB,我使用这种方法计算出最免费的窗格: 仅当我一次添加1个元素时,此方法才有效。但是如果我一次添加更多元素: 该方法getFreerColumnIndex返回相同的索引。这是因为新节点在本地还没有高度。 所以这行: 将0与新节点一起返回。 有
问题内容: 在JavaFX中获取节点绝对位置的最佳方法是什么? 假设我们在窗格(Hbox,Stackpane或任何其他窗格)中有一个节点,并且它本身可能有一个父节点。 我想获取该节点的绝对位置,并在另一个窗格中使用它。 问题答案: 这取决于您所说的“绝对”的含义。节点有一个坐标系,父节点有一个坐标系,父节点有一个坐标系,依此类推,最终有一个坐标系和一个屏幕坐标系(可能是物理显示设备的集合)。 您可
我正在使用D3进行web爬虫可视化,它使用了一个基于强制的标签图,如下面所示:基于强制的标签放置图
在C#中,我发现了一个非常可爱的方法,它允许您从指定的控件中获取所有后代及其所有后代。 我正在寻找一种类似的JavaFX方法。 我看到<code>Parent</code>类是我想要使用的,因为它是派生所有节点类的子类。 这就是我到目前为止所拥有的(我还没有在谷歌上找到任何像“JavaFX从场景中获取所有节点”这样的搜索): 那么,如何判断N是否是父级(或从父级扩展)?我这样做对吗?它似乎不起作用