【问题标题】:JTextField limit input to certains chars onlyJTextField 仅限于某些字符的输入
【发布时间】:2011-10-05 08:00:01
【问题描述】:

我想创建 JTextField,其输入字符仅限于类似 “abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVXYWZZ0123456789+&@#/%?=~_-|!:,.;” 所以我尝试覆盖

public class CustomJTextField extends JTextField {  
String goodchars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVXYWZZ0123456789+&@#/%?=~_-|!:,.;";

//... my class body ...//

@Override
public void processKeyEvent(KeyEvent ev) {
    if(c != '\b' && goodchars.indexOf(c) == -1 ) {
        ev.consume();
        return;
    }
    else 
        super.processKeyEvent(ev);}}

但这不是我想要的,因为用户不能再 ctrl-c ctrl-v ctrl-x...所以我添加了

&& ev.getKeyCode() != 17 && ev.getKeyCode() !=67 && ev.getKeyCode() != 86 && ev.getKeyCode() !=0 &&

到if条件,但现在用户可以粘贴不适当的输入,即'('或'

【问题讨论】:

  • 实际上,很少需要处理关键事件。如果它看起来像需要它,那么如果出错的可能性很高:-) @mKorbel 有答案 - DocumentFilter

标签: java swing validation jtextfield keyevent


【解决方案1】:

也许将DocumentFilterPattern 一起使用会更好,

【讨论】:

    【解决方案2】:

    尝试使用 JFormattedTextField 并使用

    MaskFormatter mf = new MaskFormatter();
    mf.setValidCharacters("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVXYWZZ0123456789+&@#/%?=~_-|!:,.;");
    JFormattedTextField textField = new JFormattedTextField(mf);
    

    编辑:对不起,那是错误的代码,这是有效的代码

    【讨论】:

    • 在创建一个MaskFormatter时,你必须给他你想要的字符串的长度。以长度为 8 的 String 为例:mf = new MaskFormatter("********");
    • 很好,但我只需要限制插入的字符,而不是多少(即1个字符可以,20个字符也可以),我该如何实现?
    • 如果你输入20个*s,你应该可以输入1-20个字符
    • 不,这不是 MaskFormatter 的含义:“准确指定字段文本的每个位置中哪些字符有效”
    • 我知道 maskformatter 的主要用途不是无法加载想要的,而是:它可以用来做他想要的。如果您使用 textField.getText() 您将获得输入的文本。而且您只能输入指定的值,这正是他真正想要的。
    猜你喜欢
    • 2012-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-13
    • 2013-03-20
    • 1970-01-01
    相关资源
    最近更新 更多