JavaFX 텍스트 필드 숫자 형식

Sheeraz Gul 2024년2월15일
JavaFX 텍스트 필드 숫자 형식

TextFormatter 클래스는 특정 형식의 필드를 만드는 데 사용됩니다. JavaFX에서 숫자 텍스트 필드를 만드는 데 사용할 수도 있습니다.

이 튜토리얼은 JavaFX에서 숫자 텍스트 필드를 생성하는 방법을 보여줍니다.

JavaFX 텍스트 필드 숫자 형식

JavaFX.scene.control.TextFormatter<V>는 특정 형식의 필드를 생성하는 데 사용됩니다. ‘포맷터’는 TextInputControl 형식의 텍스트를 두 가지 다른 구조로 설명합니다.

하나는 사용자 입력을 수정하기 위한 getFilter() 필터이고 다른 하나는 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