基于 JavaFX 中 child 的 Textnode 内容增加 BorderPane

Growing BorderPane based on child's Textnode content in JavaFX

我在弄清楚最好的程序是什么时遇到了问题,要有一个增长和收缩 BorderPane。我想尝试根据它具有的 Text 节点 child(更改文本长度)水平放大或缩小窗格。我必须考虑一些额外的限制/问题:

浏览了一段时间后,我找到了这个答案:Javafx textfield resize to text lenght?它包含一个计算文本宽度的方法。我将 BorderPane 更改为包含 VBox,后者又包含 TextField。但是,它也应该通过为 Text 节点设置 setWrappingWidth 来工作。 TextUtils class 我从上面复制的 link.

public TextField getTop() {
    Node topNode = this.borderPane.getTop();
    if((topNode instanceof VBox)) {
        VBox topVBox = (VBox) topNode;
        if(!topVBox.getChildren().isEmpty() && topVBox.getChildren().get(0) instanceof TextField) {
            return (TextField) topVBox.getChildren().get(0);
        }
    }
    return null;
}

public void adaptWidthByText(Font font, String text) {
    // + 50px for some additional space to compensate insets, borders etc.
    double newWidth = TextUtils.computeTextWidth(font, text, 0.0D) + 50;
    this.borderPane.setPrefWidth(newWidth);
}

public void setTopText(String text) {
    TextField topTextField = getTop();
    if(topTextField == null) return;
    adaptWidthByText(topTextField.getFont(), text);
    topTextField.setText(text);
}