Java FXML-显示文本输入字段的字符串长度

Java FXML-显示文本输入字段的字符串长度,java,javafx,fxml,scenebuilder,Java,Javafx,Fxml,Scenebuilder,各位,我想在输入文本字段下面显示输入文本字段的字符串长度。请参阅下面的屏幕截图 基本上,我希望计数以动态方式显示,即每当用户更改输入时,计数也应相应更改 使用javafx如何实现这一点 此外,如何在FXML文件中注入字符串长度值 您需要使用绑定来执行此操作。在文本字段下方添加标签 创建如下所示的StringBinding: StringBinding binding = Bindings.createStringBinding(() -> { String

各位,我想在输入文本字段下面显示输入文本字段的字符串长度。请参阅下面的屏幕截图

基本上,我希望计数以动态方式显示,即每当用户更改输入时,计数也应相应更改

使用javafx如何实现这一点

此外,如何在FXML文件中注入字符串长度值


您需要使用绑定来执行此操作。在文本字段下方添加标签

创建如下所示的StringBinding:

StringBinding binding = Bindings.createStringBinding(() -> {
                String characterCount = "0";
                if(textField.getText() != null){
                    characterCount = textField.getText().length() + "";
                }
                return "StringLength: " + characterCount;
            }, textField.textProperty());

countLabel.textProperty().bind(binding);

如果要避免在每个键入的字段上使用concat,请使用两个标签,一个用于StringLength,另一个用于字符计数,然后只更新该标签。

您需要使用绑定来完成此操作。在文本字段下方添加标签

创建如下所示的StringBinding:

StringBinding binding = Bindings.createStringBinding(() -> {
                String characterCount = "0";
                if(textField.getText() != null){
                    characterCount = textField.getText().length() + "";
                }
                return "StringLength: " + characterCount;
            }, textField.textProperty());

countLabel.textProperty().bind(binding);

如果要避免在每个键入的字段上使用concat,请使用两个标签,一个用于StringLength:并在其旁边使用一个用于字符计数,则只会更新该标签。

如果标签名为lbl和textField txt:

@FXML
void calculateLenght(KeyEvent event) {
        String text = txt.getText();
        int len = 0;
        if (text != null) {
            len = text.length();
            lbl.setText("lenght: " + len);
        }
}
在fxml文件中:

    <?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.VBox?>


<BorderPane xmlns:fx="http://javafx.com/fxml/1"
    xmlns="http://javafx.com/javafx/9"
    fx:controller="application.SampleController">
    <center>
        <VBox prefHeight="200.0" prefWidth="172.0"
            BorderPane.alignment="CENTER">
            <children>
                <Label text="String" />
                <TextField fx:id="txt" onKeyTyped="#calculateLenght" />
                <Label fx:id="lbl" text="lenght:" />
            </children>
        </VBox>
    </center>
</BorderPane>

请注意,如果标签名为lbl和TextField txt,则文本字段中的onKeyTyped=calculateLenght:

@FXML
void calculateLenght(KeyEvent event) {
        String text = txt.getText();
        int len = 0;
        if (text != null) {
            len = text.length();
            lbl.setText("lenght: " + len);
        }
}
在fxml文件中:

    <?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.VBox?>


<BorderPane xmlns:fx="http://javafx.com/fxml/1"
    xmlns="http://javafx.com/javafx/9"
    fx:controller="application.SampleController">
    <center>
        <VBox prefHeight="200.0" prefWidth="172.0"
            BorderPane.alignment="CENTER">
            <children>
                <Label text="String" />
                <TextField fx:id="txt" onKeyTyped="#calculateLenght" />
                <Label fx:id="lbl" text="lenght:" />
            </children>
        </VBox>
    </center>
</BorderPane>
请注意,文本字段中的onKeyTyped=calculateLenght返回一个整数绑定,其中包含StringProperty中sting值的长度。asString允许您将值格式化为字符串:

label.textProperty().bind(Bindings.length(textField.textProperty())
                                  .asString("String length: %d"));
返回包含StringProperty中sting值长度的整数绑定。asString允许您将值格式化为字符串:

label.textProperty().bind(Bindings.length(textField.textProperty())
                                  .asString("String length: %d"));