簡體   English   中英

我怎么做 textField 在 Java 中只接受字符“N 或 E”?

[英]How i can do textField accepts only character "N or E" in Java?

我怎么做 textField 在 Java 中只接受字母“N 或 E”? 不接受數字和其他字符。

        textField.textProperty().addListener((observable, oldValue, newValue) -> {
            if (newValue.length() > 1) textField.setText(oldValue);
            if (newValue.matches("[^\\d]")) return;
            textField.setText(newValue.replaceAll("\\d*", ""));
        });

我試過了,這對 maxValue 有效。 但我需要 textField 只接受“N”和“E”字符。 那么我該怎么做呢?

使用TextFormatter 您可以修改或否決對文本的建議更改。 這個版本:

  • 僅接受鍵入(或粘貼)的文本為“N”或“E”(大寫或小寫)的更改
  • 使文本大寫
  • 更改提議的更改以替換現有文本,而不是添加到其中
  • 允許刪除當前文本

您的確切要求可能略有不同。 有關更多詳細信息,請參閱TextFormatter.ChangeJavadoc

import java.util.function.UnaryOperator;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.control.TextFormatter;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;

public class NorETextField extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        TextField textField = new TextField();
        UnaryOperator<TextFormatter.Change> filter = c -> {
            if (c.getText().matches("[NnEe]")) {
                c.setText(c.getText().toUpperCase());
                c.setRange(0, textField.getText().length());
                return c ;
            } else if (c.getText().isEmpty()) {
                return c ;
            }
            return null ;
        };
        textField.setTextFormatter(new TextFormatter<String>(filter));
        BorderPane root = new BorderPane(textField);
        Scene scene = new Scene(root, 400, 250);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        Application.launch(args);
    }

}

你可以試試這個。 這僅接受字符 N

 Pattern pattern = Pattern.compile("N");
        UnaryOperator<TextFormatter.Change> filter = c -> {
            if (pattern.matcher(c.getControlNewText()).matches()) {
                return c ;
            } else {
                return null ;
            }
        };
        TextFormatter<String> formatter = new TextFormatter<>(filter);
        textField.setTextFormatter(formatter);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM