javafx - JavaFX - 获取 HBOX 的实际计算大小
问题描述
我有一个HBOX
使用USE_COMPUTED_SIZE
in的简单控件Pref-Height
,因此大小都是由内部控件计算和调整的,它们是一对VBOX
.
当我尝试将新Pane
的作为子项添加到HBOX
并从 的顶部到底部绘制一条垂直线时,问题就出现了HBOX
,所以我写了我的行:
int startX = 5;
int startY = 0;
int endX = 5;
Line line = new Line(startX,startY,endX,hbox.getHeight());
在这里,我需要hbox.getHeight()
,但令人惊讶的是:它是=-1
,因为它正在使用USE_COMPUTED_SIZE
。那么,我怎样才能获得 的真实(计算)值hbox.getHeight()
?
解决方案
未经测试,但我认为您可以执行以下操作:
public class HBoxWithLine extends HBox {
// Example of configurable property:
private final DoubleProperty lineOffset = new SimpleDoubleProperty(5);
public DoubleProperty lineOffsetProperty() {
return lineOffset ;
}
public final double getLineOffset() {
return lineOffsetProperty().get();
}
public final void setLineOffset(double lineOffset) {
lineOffsetProperty().set(lineOffset);
}
private final Line line = new Line();
public HBoxWithLine() {
getChildren().add(line);
// request layout when offset is invalidated:
lineOffset.addListener(obs -> requestLayout());
}
@Override
protected void layoutChildren() {
line.setStartX(getLineOffset());
line.setEndX(getLineOffset());
line.setStartY(0);
line.setEndY(getHeight());
super.layoutChildren();
}
}
现在您可以创建一个HBoxWithLine
并向其添加(附加)子节点,将其首选项宽度和高度设置为固定值或Region.USE_COMPUTED_SIZE
等,它应该可以正常工作。
推荐阅读
- javascript - 我有一个输入为图像的表单,但我不知道如何将输入标签的名称属性发送到 mysql 数据库?
- python - 基于字符串获取对象
- c++ - graphics.h 编译出错
- c - scanf("%[^\n]%*c", &s); 是什么意思?实际上呢?
- clojure - 在 clojure 中读取数千个文件
- javascript - _.every 函数在 Vue 组件中没有正确评估
- haskell - 有 4 个参数的文件夹?
- java - 当我填充最后一个字段时,我的应用程序不断停止。代码中没有要审查的错误
- html - 如何修复表格中的下拉菜单被行容器截断
- node.js - 在 GraphQLServer 中进行身份验证和 PubSub 的正确方法