我也发布了同样的问题in oracle javafx forum,但没有得到答复。所以在这里试试我的运气。
我有一个要求,即从数据库中动态填充文本区域的内容。我能够成功检索并显示文本区域的数据。
但是当内容太大时,我无法动态设置文本区域的高度。当我尝试将其显示为标签时,显示器完美无瑕,根据内容动态设置高度。因此,我尝试创建一个具有相同内容的标签,并将高度动态绑定到首选高度,如下所示,但它不起作用。
// Generate User Note Description
TextArea textArea = new TextArea();
Label text = new Label();
// SETTING THE TEXT TO A LABEL TO RETRIEVE THE HEIGHT
text.setText(usrNotes.getNote().trim());
// ALWAYS DISPLAYS 0.0
System.out.println("height::"+text.getHeight());
if (isMyNote) {
// ALWAYS SETS TO THE MINIMUM HEIGHT OF 60.0
textArea.setText(usrNotes.getNote().trim());
textArea.setPrefWidth(Screen.getPrimary().getVisualBounds().getWidth() - 500.0);
textArea.setWrapText(true);
textArea.setMinHeight(60.0);
// WITHOUT THIS BINDING, DISPLAYS LOT OF EXTRA SPACE AFTER THE TEXT
textArea.prefHeightProperty().bind(text.heightProperty());
textArea.setStyle("-fx-padding:0 5 2 1; -fx-font-size: 1.1em;-fx-background-color:white");
} else if (!isMyNote) {
// THIS IS PERFECT, AS EXPECTED SETS THE HEIGHT DYNAMICALLY
text.setText(usrNotes.getNote().trim());
text.setStyle("-fx-padding:0 5 2 1;");
text.setStyle("-fx-border-color: white;-fx-font-size: 1.1em;-fx-background-color:#F5F5F5;");
text.setWrapText(true);
text.setPrefWidth(Screen.getPrimary().getVisualBounds().getWidth() - 500.0);
text.setMinHeight(60.0);
}
如果有人能提供如何解决此问题的提示,我将非常感激。
谢谢-SV
答案 0 :(得分:1)
text.getHeight()
返回0的原因(因此必须绑定到text.heightProperty()
)是因为构造组件时不计算高度。它是在将组件渲染到屏幕时计算的。
如果你想提前计算一个高度,我相信你必须使用像FontMetrics(http://docs.oracle.com/javase/tutorial/2d/text/measuringtext.html)这样的东西来计算你的字符串的宽度和行高,把字符串分解成标记来计算换行符将落在哪里(根据你的宽度),然后计算出你需要多少行(因此,你需要多少行TextArea)。