在 JavaFX 中获取节点的高度(生成布局传递)
如何在JavaFX中获取节点的高度或首选高度,我有3个,我想将节点添加到最自由的面板中,例如:VBox
Childrens Total Height of the children's(Sum)
VBoxA 5 890
VBoxB 4 610
VBoxC 2 720
在这种情况下,最自由的是,我用这种方法计算最自由的窗格:VBoxB
private int getFreerColumnIndex() {
if(columns.isEmpty())
return -1;
int columnIndex = 0;
int minHeight = 0;
for(int i = 0; i < columns.size(); i++) {
int height = 0;
for(Node n : columns.get(i).getChildren()) {
height += n.getBoundsInLocal().getHeight();
}
if(i == 0) {
minHeight = height;
} else if(height < minHeight) {
minHeight = height;
columnIndex = i;
}
if(height == 0)
break;
}
return columnIndex;
}
此方法仅在我当时添加1个元素时才有效。但是,如果我当时添加更多元素:
for (int i = 0; i < 10; i++) {
SomeNode r1 = new SomeNode ();
myPane.addElement(r1);
}
该方法返回相同的索引。这是因为新节点在本地还没有 heigth。
所以这行:getFreerColumnIndex
height += n.getBoundsInLocal().getHeight();
将随新节点一起返回。0
有人知道如何获得节点的强度吗?
额外:
SomeNode
扩展Node
Method addElement() at myPane:
public void addElement(final Node element) {
index = getFreerColumnIndex();
columns.get(index).getChildren().add(element);
}
额外2:
假设我们有3个vbox:之前:
A B C
| | |
| |
|
跑:
for (int i = 0; i < 10; i++) {
SomeNode r1 = new SomeNode ();
myPane.addElement(r1);
}
后:
A B C
| | |
| | |
| |
|
|
|
|
|
|
|
|
正确:
A B C
| | |
| | |
| | |
| | |
| | |
|
|
= 某个节点