控制键盘输入到javafx TextField
发布时间:2020-12-14 05:31:43 所属栏目:Java 来源:网络整理
导读:我想将输入控制在一个 Javafx TextField中,以便我只能允许数字输入,所以如果超过最大字符,那么文本框不会有任何改变. 编辑:根据评论中的建议,我使用JavaFX项目负责人建议的方法.停止输入信件非常有用.我只需要它也可以过滤特殊字符.我尝试将过滤器更改为(te
我想将输入控制在一个
Javafx TextField中,以便我只能允许数字输入,所以如果超过最大字符,那么文本框不会有任何改变.
编辑:根据评论中的建议,我使用JavaFX项目负责人建议的方法.停止输入信件非常有用.我只需要它也可以过滤特殊字符.我尝试将过滤器更改为(text.matchs(“[0-9]”),但不允许输入退格. edit2:形成一个特殊字符和长度的过滤器.这是我的最终代码感谢您的投入. 这是我创建的TextField类: import javafx.scene.control.TextField; public class AttributeTextField extends TextField{ public AttributeTextField() { setMinWidth(25); setMaxWidth(25); } public void replaceText(int start,int end,String text) { String oldValue = getText(); if (!text.matches("[a-z]") && !text.matches("[\!"#$%&()*+,./:;<=>?@[]^_{|}~]+")) { super.replaceText(start,end,text); } if (getText().length() > 2 ) { setText(oldValue); } } public void replaceSelection(String text) { String oldValue = getText(); if (!text.matches("[a-z]") && !text.matches("[\!"#$%&()*+,./:;<=>?@[]^_{|}~]+")) { super.replaceSelection(text); } if (getText().length() > 2 ) { setText(oldValue); } } } 注意:我已经阅读了What is the recommended way to make a numeric TextField in JavaFX?这篇文章,这个解决方案对我来说不起作用.数字输入后才会触发.意思是有人可以在框中输入字母文字,并允许它直到将焦点从文本框移开.此外,他们可以输入大于允许的数字,但验证不是在每个按键上发生,而是在焦点移动(“更改”事件)之后. 解决方法
最好的办法是:
@FXML private TextField txt_Numeric; @FXML private TextField txt_Letters; @Override public void initialize(URL url,ResourceBundle rb) { /* add Event Filter to your TextFields **************************************************/ txt_Numeric.addEventFilter(KeyEvent.KEY_TYPED,numeric_Validation(10)); txt_Letters.addEventFilter(KeyEvent.KEY_TYPED,letter_Validation(10)); } /* Numeric Validation Limit the characters to maxLengh AND to ONLY DigitS *************************************/ public EventHandler<KeyEvent> numeric_Validation(final Integer max_Lengh) { 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.]")){ if(txt_TextField.getText().contains(".") && e.getCharacter().matches("[.]")){ e.consume(); }else if(txt_TextField.getText().length() == 0 && e.getCharacter().matches("[.]")){ e.consume(); } }else{ e.consume(); } } }; } /*****************************************************************************************/ /* Letters Validation Limit the characters to maxLengh AND to ONLY Letters *************************************/ public EventHandler<KeyEvent> letter_Validation(final Integer max_Lengh) { 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("[A-Za-z]")){ }else{ e.consume(); } } }; } /*****************************************************************************************/ 最好的运气. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |