javaFx文本框设置文本格式

JavaFx在使用TextField文本框时,难免有限制文本格式的需求,这时候小编尝试使用输入监听,输入框Change监听事件,本以为完成了,可是在无意间发现在输入中文时,无法监听到KeyEvent事件,所以显得不那么专业。在网上寻找到了Aimls的视频,看了之后深受感触。直接附上代码:

        @FXML
        private TextField textFieldPort;

        this.textFieldPort.setTextFormatter(new TextFormatter<String>(new UnaryOperator<TextFormatter.Change>() {
            @Override
            public TextFormatter.Change apply(TextFormatter.Change change) {
                String value = change.getText();
                if (value.matches("[0-9]*")) {
                    return change;
                }
                return null;
            }
        }));

TextField文本框中就有文本格式的接口,所以可以通过setTextFormatter(TextFormatter<?> value)方法实现自定义文本格式限制。

public final void setTextFormatter(TextFormatter<?> value) { textFormatter.set(value); }

-在文本失去焦点的时候,可以使用setTextFormatter(StringConverter<V> valueConveryer)方法实现

public TextFormatter(@NamedArg("valueConverter") StringConverter<V> valueConverter) {
        this(valueConverter, null, null);
    }

Example:文本框失去焦点时,使用trim()去除前后的空格

    @FXML
    private TextField textFieldName;

    this.textFieldName.setTextFormatter(new TextFormatter<String>(new StringConverter<String>() {
            @Override
            public String toString(String object) {
                return object == null ? "" : object;
            }

            @Override
            public String fromString(String string) {
                return string == null ? "" : string.trim();
            }
        }));

----------------------------------------------------------------------------------------------------------------------------------------------------------------------

代码整理如下:

import javafx.scene.control.TextFormatter;

import java.util.function.UnaryOperator;

public class IntUnaryOperator implements UnaryOperator<TextFormatter.Change> {

    @Override
    public TextFormatter.Change apply(TextFormatter.Change change) {
        String value = change.getText();
        if (value.matches("[0-9]*")) {
            return change;
        }
        return null;
    }
}

 

import javafx.util.StringConverter;

public class TrimStringConverter extends StringConverter<String> {
    @Override
    public String toString(String object) {
        return object == null ? "" : object;
    }

    @Override
    public String fromString(String string) {
        return string == null ? "" : string.trim();
    }
}
import javafx.scene.control.TextFormatter;

public class MyTextFormatter {
    public MyTextFormatter() {
    }

    public static TextFormatter<String> trimTextFormatter() {
        return new TextFormatter<String>(new TrimStringConverter());
    }

    public static TextFormatter<String> intTextFormatter() {
        return new TextFormatter<String>(new IntUnaryOperator());
    }
}

 

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值