JavaFX テキストフィールド番号の形式

Sheeraz Gul 2024年2月15日
JavaFX テキストフィールド番号の形式

TextFormatter クラスは、特定の形式のフィールドを作成するために使用されます。また、JavaFX で数値テキストフィールドを作成するために使用することもできます。

このチュートリアルでは、JavaFX で数値テキストフィールドを作成する方法を示します。

JavaFX テキストフィールド番号の形式

JavaFX.scene.control.TextFormatter<V> は、特定の形式のフィールドを作成するために使用されます。Formatter は、2つの異なる構造を持つフォーマット TextInputControl テキストを記述します。

1つはユーザー入力を変更するためのフィルターgetFilter() であり、もう 1つはタイプ V の値を表す特別なフォーマットを提供するために使用される値コンバーターgetValueConverter() です。TextFormatter は、フィルターと値のコンバーターだけで作成できます。

TextFormatter の構文は次のとおりです。

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

TextFormatter は整数またはその他のタイプにすることができ、setTextFormatter メソッドを使用して TextFormatter をフィールドに適用します。

数値テキストフィールドを作成する例を試してみましょう。

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

上記のコードでは、フィルターに UnaryOperator を使用し、値として StringConverter を使用しています。コードは TextFormatter を使用して、整数値のみを受け取るテキストフィールドを作成します。

出力を参照してください:

JavaFX 数値テキストフィールド

著者: 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

関連記事 - Java JavaFX