JavaFX 2.2 TextField maxlength

后端 未结 9 1471
不知归路
不知归路 2020-12-03 11:47

I am working with a JavaFX 2.2 project and I have a problem using the TextField control. I want to limit the characters that users will enter to each TextField but I can\'t

9条回答
  •  鱼传尺愫
    2020-12-03 12:06

    This method let TextField to finish all processing (copy/paste/undo safe). Do not requares to make extending class. And allow you to deside what to do with new text after every change (to push it to logic, or turn back to previous value, or even to modify it).

      // fired by every text property change
    textField.textProperty().addListener(
      (observable, oldValue, newValue) -> {
        // Your validation rules, anything you like
          // (! note 1 !) make sure that empty string (newValue.equals("")) 
          //   or initial text is always valid
          //   to prevent inifinity cycle
        // do whatever you want with newValue
    
        // If newValue is not valid for your rules
        ((StringProperty)observable).setValue(oldValue);
          // (! note 2 !) do not bind textProperty (textProperty().bind(someProperty))
          //   to anything in your code.  TextProperty implementation
          //   of StringProperty in TextFieldControl
          //   will throw RuntimeException in this case on setValue(string) call.
          //   Or catch and handle this exception.
    
        // If you want to change something in text
          // When it is valid for you with some changes that can be automated.
          // For example change it to upper case
        ((StringProperty)observable).setValue(newValue.toUpperCase());
      }
    );
    

    For your case just add this logic inside. Works perfectly.

        // For example 10 characters     
      if (newValue.length() >= 10) ((StringProperty)observable).setValue(oldValue);
    

提交回复
热议问题