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
를 사용하여 정수 값만 사용하는 텍스트 필드를 만듭니다.
출력 참조:
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