TextArea高度问题

时间:2014-07-09 18:39:03

标签: java javafx-8

我也发布了同样的问题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

1 个答案:

答案 0 :(得分:1)

text.getHeight()返回0的原因(因此必须绑定到text.heightProperty())是因为构造组件时不计算高度。它是在将组件渲染到屏幕时计算的。

如果你想提前计算一个高度,我相信你必须使用像FontMetrics(http://docs.oracle.com/javase/tutorial/2d/text/measuringtext.html)这样的东西来计算你的字符串的宽度和行高,把字符串分解成标记来计算换行符将落在哪里(根据你的宽度),然后计算出你需要多少行(因此,你需要多少行TextArea)。