Wrapping Label text in a VBox using FXML

2019-06-27 04:41发布

问题:

I'm writing a JavaFX application and I'd like to create a screen that contains 2 long pieces of text. I don't know what the text is ahead of time, it will be filled in by some code at run time.

To do this I thought I'd make a VBox with 2 Labels. I assume that if I don't add dimensions, the Labels will span the VBox. Since the text is long I'd like it to wrap.

Here's the FXML that I tried:

<VBox spacing="20" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <Label fx:id="label1" text="Dummy Text" wrapText="true" />   
      <Label fx:id="label2" text="Dummy Text" wrapText="true" />  
   </children>
</VBox>

This doesn't work because the text doesn't wrap but simply goes off the right side of the window. What do I need to get this to work?

回答1:

Try to set prefWidth and prefHeight , since your label doesnt know when to start wrap

<VBox prefHeight="100.0" prefWidth="300.0"  ...

If that does not work try it on parent contrainer of HBox. Are you using scene builder? I recommend you to use it

Works well(its auto generated):

<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="333.0" xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1">
   <center>
      <VBox prefHeight="200.0" prefWidth="325.0" BorderPane.alignment="CENTER">
         <children>
            <Label text="Wrap text Wrap text Wrap text Wrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap text" wrapText="true" />
            <Label layoutX="10.0" layoutY="10.0" text="just textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust text" />
         </children>
      </VBox>
   </center>
</BorderPane>


回答2:

Did you use stylesheets there with class name "label1" and "label2" if you did, setting wrapText="true" will not work there in the fxml code

  1. You try to remove the id's and see if it wraps while wrapText="true" is still set

or

  1. Put some css code to that css file that would wrap text like this -fx-word-wrap: break-word; in the particular class;