在JavaFX中获取节点的高度(生成布局过程)
如何在JavaFX中获取节点的高度或首选高度,我有3个在JavaFX中获取节点的高度(生成布局过程),java,javafx,vbox,Java,Javafx,Vbox,如何在JavaFX中获取节点的高度或首选高度,我有3个VBox,我想将节点添加到最自由的面板中,例如: Childrens Total Height of the children's(Sum) VBoxA 5 890 VBoxB 4 610 VBoxC 2 720 在本例中,最自由的是VB
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;
}
将返回带有新节点的0
有人知道如何获得节点的高度吗
额外:
SomeNode
扩展了Node
myPane中的方法addElement():
public void addElement(final Node element) {
index = getFreerColumnIndex();
columns.get(index).getChildren().add(element);
}
额外2: 假设我们有3个vbox: 之前: 运行: 正确:
A B C
| | |
| | |
| | |
| | |
| | |
|
|
=某个节点您需要做的是:
applyCss()
和layout()
layout()
结合使用,以在
下一个脉冲,或者如果场景不在舞台上
如果节点的场景不为空,CSS将应用于该节点
此节点的CSS状态是否干净。CSS样式从最顶端的父级应用
此节点的CSS状态不是clean,这可能会影响其他节点的样式。
如果节点不在场景中,则此方法为无操作。场景不一定要在舞台上
此方法不调用layout()
方法。通常,调用方将使用
遵循操作顺序
parentNode.applyCss();
parentNode.layout();
作为更完整的示例,以下代码使用applyCss()
和layout()
查找
显示舞台前按钮的宽度和高度。如果调用applyCss()
或者对layout()
的调用被注释掉,对getWidth()
和getHeight()的调用被注释掉
将返回零(直到显示阶段后的一段时间)
另类
这里的另一个选项是重写父节点的方法,该方法“在布局过程中调用,以布局此父节点中的子节点”。在执行此操作时,可能还需要重写方法to以及prefWidth和min&max height&width的其他计算方法。使用这种方法的详细描述很复杂,超出了本答案的范围。对于新蜜蜂来说,这是一个非常全面的答案,这使得学习的本质更加容易
A B C
| | |
| |
|
for (int i = 0; i < 10; i++) {
SomeNode r1 = new SomeNode ();
myPane.addElement(r1);
}
A B C
| | |
| | |
| |
|
|
|
|
|
|
|
|
A B C
| | |
| | |
| | |
| | |
| | |
|
parentNode.applyCss();
parentNode.layout();
public void start(Stage stage) throws Exception {
Group root = new Group();
Scene scene = new Scene(root);
Button button = new Button("Hello World");
root.getChildren().add(button);
root.applyCss();
root.layout();
double width = button.getWidth();
double height = button.getHeight();
System.out.println(width + ", " + height);
stage.setScene(scene);
stage.show();
}