首页 > 解决方案 > JavaFX - 获取 HBOX 的实际计算大小

问题描述

我有一个HBOX使用USE_COMPUTED_SIZEin的简单控件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()

标签: javafx

解决方案


未经测试,但我认为您可以执行以下操作:

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等,它应该可以正常工作。


推荐阅读