Format de numéro de champ de texte JavaFX

Sheeraz Gul 12 octobre 2023
Format de numéro de champ de texte JavaFX

La classe TextFormatter est utilisée pour créer des champs avec certains formats. Il peut également être utilisé pour créer un champ de texte numérique dans JavaFX.

Ce tutoriel montre comment créer un champ de texte numérique dans JavaFX.

Format de numéro de champ de texte JavaFX

JavaFX.scene.control.TextFormatter<V> est utilisé pour créer des champs avec certains formats. Le Formatter décrit un texte de format TextInputControl avec deux structures différentes.

L’un est un filtre getFilter() pour modifier l’entrée de l’utilisateur, et l’autre est un convertisseur de valeur getValueConverter() utilisé pour fournir un format spécial qui représente une valeur de type V. Le TextFormatter peut être créé uniquement avec le filtre et le convertisseur de valeur.

La syntaxe de TextFormatter est la suivante :

TextFormatter<Integer> Text_Formatter = new TextFormatter<Integer>(String_Converter, 0, Integer_Filter);
Numeric_Field.setTextFormatter(Text_Formatter);

Le TextFormatter peut être un entier ou tout autre type, et la méthode setTextFormatter est utilisée pour appliquer le TextFormatter au champ.

Essayons un exemple pour créer un champ de texte numérique :

package delftstack;

import java.util.function.UnaryOperator;
import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.control.TextFormatter;
import javafx.scene.control.TextFormatter.Change;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.util.StringConverter;
import javafx.util.converter.IntegerStringConverter;

public class Numeric_TextField extends Application {
  @Override
  public void start(Stage Demo_Stage) {
    TextField Numeric_Field = new TextField();
    UnaryOperator<Change> Integer_Filter = change -> {
      String Demo_Text = change.getControlNewText();
      if (Demo_Text.matches("-?([1-9][0-9]*)?")) {
        return change;
      } else if ("-".equals(change.getText())) {
        if (change.getControlText().startsWith("-")) {
          change.setText("");
          change.setRange(0, 1);
          change.setCaretPosition(change.getCaretPosition() - 2);
          change.setAnchor(change.getAnchor() - 2);
          return change;
        } else {
          change.setRange(0, 0);
          return change;
        }
      }
      return null;
    };

    StringConverter<Integer> String_Converter = new IntegerStringConverter() {
      @Override
      public Integer fromString(String s) {
        if (s.isEmpty())
          return 0;
        return super.fromString(s);
      }
    };

    TextFormatter<Integer> Text_Formatter =
        new TextFormatter<Integer>(String_Converter, 0, Integer_Filter);
    Numeric_Field.setTextFormatter(Text_Formatter);

    // demo listener:
    Text_Formatter.valueProperty().addListener(
        (obs, oldValue, newValue) -> System.out.println(newValue));

    VBox VBox_Root = new VBox(5, Numeric_Field, new Button("Click Here"));
    VBox_Root.setAlignment(Pos.CENTER);
    Scene scene = new Scene(VBox_Root, 300, 120);
    Demo_Stage.setScene(scene);
    Demo_Stage.show();
  }

  public static void main(String[] args) {
    launch(args);
  }
}

Le code ci-dessus utilise un UnaryOperator pour le filtre et StringConverter comme valeur. Le code utilise TextFormatter pour créer un champ de texte qui ne prendra que les valeurs entières.

Voir la sortie :

Champ de texte numérique JavaFX

Auteur: Sheeraz Gul
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook

Article connexe - Java JavaFX