Obtenga la altura de un nodo en JavaFX (genere un pase de diseño)
Cómo obtener la altura o preferir la altura de un nodo en JavaFX, tengo 3VBox
y quiero agregar nodos al panel más libre, por ejemplo:
Childrens Total Height of the children's(Sum)
VBoxA 5 890
VBoxB 4 610
VBoxC 2 720
en este caso, el más libre es elVBoxB
, Calculo el panel más libre con este método:
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;
}
Este método solo funciona si agrego 1 elemento a la vez. Pero si agrego más elementos en el momento:
for (int i = 0; i < 10; i++) {
SomeNode r1 = new SomeNode ();
myPane.addElement(r1);
}
el métodogetFreerColumnIndex
devolver el mismo índice Esto se debe a que los nuevos nodos aún no tienen altura local.
Entonces esta línea:
height += n.getBoundsInLocal().getHeight();
volverá0
con los nuevos nodos
¿Alguien sabe cómo obtener la altura de un nodo?
Extra:SomeNode
se extiende deNode
Método addElement () en myPane:
public void addElement(final Node element) {
index = getFreerColumnIndex();
columns.get(index).getChildren().add(element);
}
Extra 2:supongamos que tenemos 3 vbox: Antes:
A B C
| | |
| |
|
Correr:
for (int i = 0; i < 10; i++) {
SomeNode r1 = new SomeNode ();
myPane.addElement(r1);
}
Después:
A B C
| | |
| | |
| |
|
|
|
|
|
|
|
|
Correcto:
A B C
| | |
| | |
| | |
| | |
| | |
|
|
= Algún nodo