[解決済み] JavaFX 入力検証用テキストフィールド
2022-02-15 17:01:38
質問
JavaFXとScene Builderを使用しており、テキストフィールドを持つフォームがあります。これらのテキストフィールドのうち3つは、文字列からdoubleにパースされます。
学校マークとしたいので、1.0から6.0までの値しか許されないはずです。ユーザは "2.34.4" のようなものを書くことはできませんが、 "5.5" や "2.9" のようなものは大丈夫でしょう。
パースされたフィールドのバリデーション。
public void validate(KeyEvent event) {
String content = event.getCharacter();
if ("123456.".contains(content)) {
// No numbers smaller than 1.0 or bigger than 6.0 - How?
} else {
event.consume();
}
}
ユーザーが正しい値を入力したかどうかをテストするにはどうすればよいですか?
StackoverflowやGoogleですでに検索しましたが、満足のいく解決策は見つかりませんでした。
どのように解決するのですか?
textField.focusedProperty().addListener((arg0, oldValue, newValue) -> {
if (!newValue) { //when focus lost
if(!textField.getText().matches("[1-5]\\.[0-9]|6\\.0")){
//when it not matches the pattern (1.0 - 6.0)
//set the textField empty
textField.setText("");
}
}
});
というパターンに変更することもできます。
[1-5](\.[0-9]){0,1}|6(.0){0,1}
では
1,2,3,4,5,6
でも良いのですが(それだけではありません。
1.0,2.0,...
)
アップデート ここでは、1(.00)から6(.00)までの値を許可した小さなテストアプリケーションを紹介します。
public class JavaFxSample extends Application {
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Enter number and hit the button");
GridPane grid = new GridPane();
grid.setAlignment(Pos.CENTER);
Label label1To6 = new Label("1.0-6.0:");
grid.add(label1To6, 0, 1);
TextField textField1To6 = new TextField();
textField1To6.focusedProperty().addListener((arg0, oldValue, newValue) -> {
if (!newValue) { // when focus lost
if (!textField1To6.getText().matches("[1-5](\\.[0-9]{1,2}){0,1}|6(\\.0{1,2}){0,1}")) {
// when it not matches the pattern (1.0 - 6.0)
// set the textField empty
textField1To6.setText("");
}
}
});
grid.add(textField1To6, 1, 1);
grid.add(new Button("Hit me!"), 2, 1);
Scene scene = new Scene(grid, 300, 275);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
関連
-
[解決済み】Javaパッケージが存在しないエラー
-
[解決済み] java.sql.SQLException: ユーザー 'root'@'localhost' (using password: YES) のためのアクセスが拒否されました。
-
[解決済み] hibernateでResultSetを抽出できない。
-
[解決済み】宣言されたパッケージが期待されるパッケージと一致しない ""
-
[解決済み】Javaクラスの "型に解決できない"
-
[解決済み】なぜjava.io.Fileにはcloseメソッドがないのでしょうか?
-
[解決済み】Javaで文字列をコピーするにはどうしたらいいですか?
-
[解決済み】Java Error "Exception in thread "main" java.util.InputMismatchException" Array プログラムで発生。
-
[解決済み】Javaのswitch文。定数式が必要だが、定数である
-
[解決済み] JavaFXアプリケーションアイコン
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】エラー:'if'のない'else'エラー
-
[解決済み】代入の左手は必ず変数 CharAt
-
[解決済み】「'void' type not allowed here」エラーの原因とは?
-
[解決済み】Javaクラスの "型に解決できない"
-
[解決済み] 二項演算子「&」のオペランド型がおかしい java
-
[解決済み】なぜjava.io.Fileにはcloseメソッドがないのでしょうか?
-
[解決済み】「java -cp」と「java -jar」の違い?
-
[解決済み】Java: GZIPInputStreamの作成に失敗しました。GZIP形式ではありません
-
[解決済み】koch snowflake java recursion
-
[解決済み】接続Java - MySQL : 公開鍵の取得は許可されていません。