控制键盘输入到javafx 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-Za-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-Za-z]") && !text.matches("[\\\\!\"#$%&()*+,./:;<=>?@\\[\\]^_{|}~]+")) {
            super.replaceSelection(text);
        }
        if (getText().length() > 2 ) {
            setText(oldValue);
        }
    }
}

解决方法

我想控制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);
        }
    }
}

注意:我已阅读在JavaFX中创建数字TextField的推荐方法是什么?这个帖子,这个解决方案对我不起作用。输入号码后才会触发。意思是有人可以在框中输入字母文本,并且直到他们将焦点从文本字段移开为止。同样,他们可以输入比允许的数字大的数字,但是验证不是在每次按键时进行,而是在焦点移动(“更改”事件)之后进行。

猜你在找的技术问答相关文章

如何检查配对的蓝牙设备是打印机还是扫描仪(Android)
是否允许实体正文进行HTTP DELETE请求?
如何将ZipInputStream转换为InputStream?
java.util.logging Java 8中的变量
PowerMockito.doReturn返回null
Java中的RESTful调用
Swing / Java:如何正确使用getText和setText字符串
特殊字符和重音字符
Android Studio中的ndk.dir错误
错误“找不到主类”