Java中如何设置textField仅允许输入N、E两个字符
JavaFX TextField仅允许输入N/E的实现方案
问题原因
你原有代码的正则逻辑仅做了数字过滤:if (newValue.matches("[^\\d]")) return; 表示只要新值不是数字就直接放行,所有非数字的其他字符(包括除N/E外的字母、符号等)都会被保留,因此无法达到限制要求。
方案1:修改现有监听器实现
直接调整监听逻辑,通过正则一次性校验长度和合法字符:
textField.textProperty().addListener((observable, oldValue, newValue) -> { // 正则规则:仅允许空值、单个N/E(含大小写,不需要小写可删除正则中的ne) if (!newValue.matches("^[NEne]?$")) { textField.setText(oldValue); } });
上述逻辑同时覆盖了最大长度1的限制和合法字符限制,无需额外编写长度判断代码。如果要求严格仅允许大写N/E,将正则改为^[NE]?$即可。
方案2:官方推荐TextFormatter实现(更稳定)
JavaFX官方推荐使用TextFormatter实现输入限制,可避免在textProperty监听中调用setText可能引发的重复监听异常,性能更稳定:
UnaryOperator<TextFormatter.Change> inputFilter = change -> { String newText = change.getControlNewText(); if (newText.matches("^[NEne]?$")) { return change; } return null; }; textField.setTextFormatter(new TextFormatter<>(inputFilter));
内容的提问来源于stack exchange,提问作者Aziz
相关产品推荐
相关产品推荐

