如何使 JavaFX 文本换行工作?
How to make JavaFX text wrap work?
我这辈子都无法让 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
es 的文本之上。
我想要的是让我的文本换行到 HBox
es 的宽度,它应该与父级的实际大小相同。
我的控制器在样式和布局方面没有做任何事情,我的 .css 没有做任何事情。
我正在使用 java8。
您可以使用 wrappingWidthProperty
以像素为单位定义环绕宽度。
您可以在绑定中使用它:
textID.wrappingWidthProperty().bind(tabPane.widthProperty());
这会将提到的 属性 绑定到 TabPane
的宽度。注意:绑定到 HBox
或 VBox
将不起作用,因为它们的宽度是 Text
的实际宽度(HBox
的大小调整为 Text
并且 VBox
的大小调整为 HBox
) 的宽度。
我在一个简单的对话框中有过类似的需求。对话框的根是一个 2x2 GridPane。每行包含一个跨越两列的 HBox。我使用标签在第 0 行的 HBox 中显示消息。要包装文本,我使用以下内容:
标签label = new Label(message);
label.setWrapText(真);
然后,当然是将标签添加到 HBox 中。对于您的示例,也许您需要做的就是将 Text 更改为 Label,这样就可以了。
如果您使用的是 SceneBuilder,则可以进入 Label 的属性选项卡并单击 WrapText 复选框。
我这辈子都无法让 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
es 的文本之上。
我想要的是让我的文本换行到 HBox
es 的宽度,它应该与父级的实际大小相同。
我的控制器在样式和布局方面没有做任何事情,我的 .css 没有做任何事情。
我正在使用 java8。
您可以使用 wrappingWidthProperty
以像素为单位定义环绕宽度。
您可以在绑定中使用它:
textID.wrappingWidthProperty().bind(tabPane.widthProperty());
这会将提到的 属性 绑定到 TabPane
的宽度。注意:绑定到 HBox
或 VBox
将不起作用,因为它们的宽度是 Text
的实际宽度(HBox
的大小调整为 Text
并且 VBox
的大小调整为 HBox
) 的宽度。
我在一个简单的对话框中有过类似的需求。对话框的根是一个 2x2 GridPane。每行包含一个跨越两列的 HBox。我使用标签在第 0 行的 HBox 中显示消息。要包装文本,我使用以下内容: 标签label = new Label(message); label.setWrapText(真);
然后,当然是将标签添加到 HBox 中。对于您的示例,也许您需要做的就是将 Text 更改为 Label,这样就可以了。
如果您使用的是 SceneBuilder,则可以进入 Label 的属性选项卡并单击 WrapText 复选框。