JavaFX Textfeld Zahlenformat

Sheeraz Gul 15 Februar 2024
JavaFX Textfeld Zahlenformat

Die Klasse TextFormatter wird verwendet, um Felder mit bestimmten Formaten zu erstellen. Es kann auch verwendet werden, um ein numerisches Textfeld in JavaFX zu erstellen.

Dieses Tutorial zeigt, wie Sie ein numerisches Textfeld in JavaFX erstellen.

JavaFX Textfeld Zahlenformat

JavaFX.scene.control.TextFormatter<V> wird verwendet, um Felder mit bestimmten Formaten zu erstellen. Der Formatter beschreibt ein Format TextInputControl Text mit zwei unterschiedlichen Strukturen.

Der eine ist ein Filter getFilter(), um die Benutzereingaben zu modifizieren, und der andere ist ein Wertkonverter getValueConverter(), der verwendet wird, um ein spezielles Format bereitzustellen, das einen Wert vom Typ V darstellt. Der TextFormatter kann nur mit dem Filter und dem Wertekonverter erstellt werden.

Die Syntax für TextFormatter lautet:

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

Der TextFormatter kann eine Ganzzahl oder ein beliebiger anderer Typ sein, und die Methode setTextFormatter wird verwendet, um den TextFormatter auf das Feld anzuwenden.

Versuchen wir ein Beispiel, um ein numerisches Textfeld zu erstellen:

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);
  }
}

Der obige Code verwendet einen UnaryOperator für den Filter und StringConverter als Wert. Der Code verwendet TextFormatter, um ein Textfeld zu erstellen, das nur die ganzzahligen Werte akzeptiert.

Siehe Ausgabe:

Numerisches JavaFX-Textfeld

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

Verwandter Artikel - Java JavaFX