簡體   English   中英

JavaFX:如何使用事件處理程序處理textField上的文本選擇?

[英]JavaFX: How to handle text selection on textField with event handler?

我有一個帶有以下事件處理程序的javaFX文本字段:

public static EventHandler<KeyEvent> numericValidation(final Integer maxLengh) {
    return new EventHandler<KeyEvent>() {
        @Override
        public void handle(KeyEvent e) {
            TextField txt_TextField = (TextField) e.getSource();

            if (txt_TextField.getText().length() >= max_Lengh) {
                e.consume();
            }
            if(!e.getCharacter().matches("[0-9]")){
                e.consume();
            }
        }
    };
}
...
yearTextField.addEventFilter(KeyEvent.KEY_TYPED , numeric_Validation(4));

這應該確保文本字段只能接受最大為maxLength位的數字。 問題是,現在如果我從文本字段中選擇一些文本(一些數字),然后嘗試寫其他數字,它將無能為力。 我希望將所選文本替換為我正在編寫的文本,就像它與基本文本字段一樣,只要它是數字並且不會超過maxLength的長度即可。 我該如何實現?

使用使用UnaryOperator作為構造函數參數創建的TextFormatter 這個UnaryOperator接收一個對象,該對象除其他信息外還包含輸入所產生的新文本。 您可以返回影響結果的修改后的更改,或者直接為輸入返回null而不修改TextField

如果您將多個數字復制並粘貼到TextField ,則使用此方法的代碼也可以使用...

例:

int maxLength = 8;
final String matchString = "\\d{0," + maxLength + "}"; // allow 0 to maxLength digits

TextField textField = new TextField();
TextFormatter<?> formatter = new TextFormatter<>(change -> {
    String newText = change.getControlNewText();
    return newText.matches(matchString) ? change : null;
});
textField.setTextFormatter(formatter);

暫無
暫無

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

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