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
を使用して、整数値のみを受け取るテキストフィールドを作成します。
出力を参照してください:
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