加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

控制键盘输入到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();
            }
        }
    };
}    
/*****************************************************************************************/

最好的运气.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读