Получить высоту узла в JavaFX (сгенерировать проход макета)
Как получить высоту или предпочесть высоту узла в JavaFX, у меня есть 3VBox
и я хочу добавить узлы на наиболее свободную панель, например:
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);
}
методgetFreerColumnIndex
вернуть тот же индекс. Это связано с тем, что новые узлы еще не имеют высоты в локальной сети.
Итак, эта строка:
height += n.getBoundsInLocal().getHeight();
вернусь0
с новыми узлами.
Кто-нибудь знает, как получить высоту узла?
Дополнительно:SomeNode
простирается отNode
Метод addElement () в 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
| | |
| | |
| | |
| | |
| | |
|
|
= Какой-то узел