java - 如何使 JavaFX 文本换行工作?

标签 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 什么都不做

缩小 HBoxes 确实会使文本换行,但它最终会位于其他 HBoxes 的文本之上。

我想要的是让我的文本换行到 HBoxes 的宽度,它应该与父级的实际大小相同。

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

我正在使用 java8。

最佳答案

您可以使用 wrappingWidthProperty以像素为单位定义环绕宽度。

您可以在绑定(bind)中使用它:

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

这将上述属性绑定(bind)到 TabPane 的宽度。注意:绑定(bind)到 HBoxVBox 将不起作用,因为它们的宽度是 Text 的实际宽度(HBox 调整为 Text 的宽度,VBox 调整为 HBox 的宽度)。

关于java - 如何使 JavaFX 文本换行工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40631744/

相关文章:

python - 你如何在 Jupyter notebook 中换行?

java - 使用 NestedRuntimeException 和 NestedCheckedException

java - 我的 quarkus runner jar 总是以阻塞模式启动

java - Jfree图表鼠标拖动缩放

Javafx 使用线程将子项动态添加到 TreeView ?

java - 尝试让 ListView 工作

java - WorldWind Java 中的闪烁注释

java - 如何使 ComboBox CellFactory 正确地动态禁用项目?

html - 使 div 向左浮动,但如果文本太长则不为 "fall"

c# - 如何从多行文本框中获取换行?