【问题标题】:Java FXML - Display String length of text input fieldJava FXML - 显示文本输入字段的字符串长度
【发布时间】:2018-07-03 18:12:17
【问题描述】:

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

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

如何使用 javafx 实现这一点?

另外,如何将字符串长度值注入到FXML文件中?

【问题讨论】:

    标签: java javafx fxml scenebuilder


    【解决方案1】:

    Bindings.length 返回一个IntegerBinding,其中包含StringProperty 中的字符串值的长度。 asString 允许您将值格式化为字符串:

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

    【讨论】:

      【解决方案2】:

      您需要使用绑定来执行此操作。在您的 TextField 下方添加一个标签。

      像这样创建一个 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:,另一个用于字符计数,那么只会更新该标签。

      【讨论】:

        【解决方案3】:

        如果你的标签被称为 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>
        

        请注意 TextField 中的 onKeyTyped="#calculateLenght"

        【讨论】:

          猜你喜欢
          • 2021-04-20
          • 2020-12-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-01-08
          • 1970-01-01
          • 2021-05-26
          • 1970-01-01
          相关资源
          最近更新 更多