如何使JavaFX文本换行工作?

时间:2016-11-16 12:04:06

标签: java javafx word-wrap

我不能为我的生活制作JavaFX换行文字。相反,我的方框大小为Text

这是我的主要内容:

BorderPane main = FXMLLoader.load(getClass().getResource("main.fxml"));

primaryStage.setTitle("D394");
primaryStage.setScene(new Scene(main, 1000, 500));
primaryStage.getScene().getStylesheets().add("main.css");
primaryStage.show();

这是我的main.fxml。它非常大,对不起。

<BorderPane prefHeight="401.0" prefWidth="900.0" xmlns="http://javafx.com/javafx/8.0.112-ea"
            xmlns:fx="http://javafx.com/fxml/1" fx:controller="ro.softvisionmedia.gui.MainController">
    <top>
        <MenuBar fx:id="menuBar" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity">
            <Menu items="" text="Lala">
            </Menu>
        </MenuBar>
    </top>

    <center>
        <TabPane fx:id="tabPane">

            <Tab id="tab_1" fx:id="tab1_D394" closable="false" text="D394">
            </Tab>

            <Tab fx:id="tab2_DateIdentif" closable="false" text="Date identificare">
                <TabPane fx:id="tabPane_dateIdentif">
                    <Tab fx:id="identifPersTVA" closable="false" text="Persoana inregistrata in scopuri de TVA">
                    </Tab>

                    <Tab fx:id="identifRepFiscal" closable="false" text="Reprezentant fiscal/legal/imputernicit">
                    </Tab>
                    <Tab fx:id="identifIntocmit" closable="false" text="Intocmitor">
                        <VBox fx:id="vBoxIntocmitor">
                            <HBox>
                                <TextFlow>
                                    <Text text="Subsemnatul "/>
                                    <Text fx:id="denumireRtext"/>
                                    <Text text=", in calitate de reprezentant legal, "/>
                                    <TextField fx:id="functieReprez"/>
                                    <Text>declar, sub
                                        sanctiunile aplicate faptei de fals in acte publice, ca datele din aceasta
                                        declaratie sunt corecte si complete, iar persoana care a intocmit prezenta
                                        declaratie este
                                    </Text>
                                </TextFlow>
                            </HBox>
                            <HBox>
                                <Label text="Denumire/nume prenume"/>
                                <TextField fx:id="denumireIntocmitor"/>
                                <Label text="CUI/CNP/NIF"/>
                                <TextField fx:id="cifIntocmitor"/>
                            </HBox>
                            <HBox>
                                <Label text="Persoana juridica"/>
                                <RadioButton fx:id="tipIntocmitorPJ"/>
                                <Label text="Calitate"/>
                                <TextField fx:id="calitateIntocmitor"/>
                            </HBox>
                            <HBox>
                                <Label text="Persoana fizica"/>
                                <RadioButton fx:id="tipIntocmitorPF"/>
                                <Label text="Functia in cadrul persoanei impozabile"/>
                                <TextField fx:id="functieIntocmitor"/>
                                <Label text="Alta calitate"/>
                                <Text text="?????"/>
                                <!-- @todo ce vine aici? -->
                            </HBox>
                            <HBox>
                                <TextFlow>
                                    <Text text="De asemenea, subsemnatul "/>
                                    <Text fx:id="denumireRtext2"/>
                                    <Text text=",in calitate de reprezentant legal "/>
                                    <Text fx:id="functieReprezText"/>
                                    <Text text=" declar:"/>
                                </TextFlow>
                            </HBox>
                            <HBox>
                                <Text>1. sunt de acord ca, pentru anul fiscal 2016, in sensul prevederilor art. 11 alin
                                    (3) lit. d) din Legea nr. 207/2015 privind Codul de procedura fiscala, datele
                                    inscrise in
                                    prezenta declaratie referitoare la tranzactiile derulate cu fiecare persoana
                                    impozabila (client/furnizor) inregistrata in scopuri de TVA sa fie consultate de
                                    catre aceasta
                                    prin intermediul aplicatiei informatice pusa la dispozitie de ANAF.
                                </Text>
                                <RadioButton fx:id="optinueDA" text="Da"/>
                                <RadioButton fx:id="optiuneNU" text="Nu"/>
                            </HBox>
                            <HBox>
                                <Text>2. Sunt de acord cu schimbarea optiunii , astfel ca pentru anul fiscal 2016, in
                                    sensul prevederilor art. 11 alin (3) lit. d) din Legea nr. 207/2015 privind Codul de
                                    procedura fiscala, datele inscrise in prezenta declaratie referitoare la
                                    tranzactiile derulate cu fiecare persoana impozabila (client/furnizor) inregistrata
                                    in scopuri de
                                    TVA sa fie consultate de catre aceasta prin intermediul aplicatiei informatice pusa
                                    la dispozitie de ANAF
                                </Text>
                                <RadioButton fx:id="schimbOptiuneDA" text="Da"/>
                                <RadioButton fx:id="schimbOptiuneNU" text="Nu"/>
                            </HBox>
                        </VBox>
                    </Tab>
                </TabPane>
            </Tab>
        </TabPane>
    </center>

    <bottom>
        <HBox prefHeight="0.0" prefWidth="897.0">
            <Button onAction="#nextTab" text="Pagina urmatoare"/>
            <Button onAction="#validate" text="Valideaza XML-ul"/>
            <Button onAction="#validateCreate" text="Valideaza XML-ul si creeaza PDF"/>
            <Button onAction="#validateCreateSign" text="Valideaza XML-ul si creeaza PDF semnat"/>
        </HBox>
    </bottom>
</BorderPane>

This is how it ends up looking 文本setPrefWidth无效

使HBox es缩小会使文本换行,但最终会出现在其他HBox的文本之上。

我想要的是我的文字包裹到HBox es的宽度,该宽度应与父实际尺寸相同。

我的控制器在样式和布局方面没有做任何事情,我的.css也没有做任何事情。

我正在使用java8。

2 个答案:

答案 0 :(得分:6)

您可以使用wrappingWidthProperty来定义包装宽度(以像素为单位)。

您可以在绑定中使用它:

textID.wrappingWidthProperty().bind(tabPane.widthProperty());

这会将提到的属性绑定到TabPane的宽度。注意:绑定到HBoxVBox不起作用,因为它们的宽度是Text的实际宽度(HBox的大小调整为Text的宽度{1}} VBox的大小调整为HBox的宽度。

答案 1 :(得分:1)

我在一个简单的对话框中有类似的需求。对话框的根是2x2 GridPane。每行包含一个跨越两列的HBox。我使用Label在第0行的HBox中显示消息。要包装文本,我使用以下内容: 标签标签=新标签(消息); label.setWrapText(真);

然后,当然,您将标签添加到HBox。对于您的示例,您可能需要做的就是将Text更改为Label,这将起作用。

如果您使用的是SceneBuilder,可以进入Label的属性选项卡,然后单击WrapText复选框。