3d 基于子对象的增长边框';JavaFX中的文本节点内容

3d 基于子对象的增长边框';JavaFX中的文本节点内容,3d,javafx,resize,2d,textnode,3d,Javafx,Resize,2d,Textnode,我很难弄清楚最好的程序是什么,有一个不断增长和收缩的边框窗格。我想根据窗格的文本节点子节点(文本长度不断变化)水平放大或缩小窗格。我必须考虑一些额外的限制/问题: 无法使用标签,因为它们在3D场景中渲染效果更差。即使lcd/灰色/高速缓存打开或关闭 如果文本长度大于其边界框宽度,则文本节点将进行换行 使用setWrappingWidth(0)自动右对齐文本节点,而不是我需要的水平居中对齐 使用setwrappingwidt(Double.MAX_值)在3D场景中使用相机经过时引发异常 还没有弄

我很难弄清楚最好的程序是什么,有一个不断增长和收缩的
边框窗格
。我想根据窗格的
文本
节点子节点(文本长度不断变化)水平放大或缩小窗格。我必须考虑一些额外的限制/问题:

  • 无法使用
    标签
    ,因为它们在3D场景中渲染效果更差。即使lcd/灰色/高速缓存打开或关闭
  • 如果文本长度大于其边界框宽度,则文本节点将进行换行
  • 使用
    setWrappingWidth(0)
    自动右对齐文本节点,而不是我需要的水平居中对齐
  • 使用
    setwrappingwidt(Double.MAX_值)
    在3D场景中使用相机经过时引发异常
  • 还没有弄清楚如何实际设置节点的宽度。我可以通过
    getLayoutBounds().getWidth()
    获得它
  • 文本节点类似乎没有任何可用的宽度绑定

在浏览了一段时间后,我发现了这个答案:它包含了一个计算文本宽度的方法。我将我的
边框窗格
更改为包含
VBox
,而VBox又包含一个
文本字段
。但是,它也应该通过为
文本
节点设置
setWrappingWidth
来工作。
TextUtils
class I是从上面的链接复制的

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);
}