检查jtextfield是否只包含特定的允许字符

p5fdfcr1  于 2021-07-09  发布在  Java
关注(0)|答案(3)|浏览(307)

我有一个 JFormattedTextField 我只想插入字母数字字符。我正在尝试使用此代码启动 JDialog 当用户键入不允许的字符时,如果从 JFormattedTextField . 当我运行这个代码时,没有 JOptionPane 当我键入符号时会出现。我知道我的代码有问题,但由于我的经验不足,我无法识别它。我会很感激你的帮助。
先谢谢你

static JFormattedTextField indivname = new JFormattedTextField();

final String individ = indivname.getText();

indivname.getDocument().addDocumentListener(new DocumentListener() {
    public void changedUpdate(DocumentEvent e) {
        warn(individ);
    }
    public void removeUpdate(DocumentEvent e) {
        warn(individ);
    }
    public void insertUpdate(DocumentEvent e) {
        warn(individ);
    }       
    public void warn(String textcheck) {
        textcheck = indivname.getText();
        boolean match = textcheck.matches("[a-zA-Z0-9]+"); 

        if (match=false) {                            
            JOptionPane.showMessageDialog(null, "You have inserted restricted characters (Only alphanumeric characters are allowed)", "Warning", JOptionPane.WARNING_MESSAGE);                   
        }

        if (match=true) {                            
            textcheck = individ ;                     
        }                   
    }
});
wqnecbli

wqnecbli1#

您正在使用赋值运算符 = 而不是比较 == 符合 if 声明:

if (match = false) {

 ...

 if (match=true) {

表达式 match = false 结果 match 得到一个 false 整个表达式总是返回值 false .
应将这些替换为:

if (!match) {
     JOptionPane.showMessageDialog(null, "You have inserted restricted characters (Only alphanumeric characters are allowed)", "Warning", JOptionPane.WARNING_MESSAGE);
 } else { // instead of if(match)
     textcheck = individ;
 }

它使用 match 直接决定执行哪个分支。

bvjveswy

bvjveswy2#

使用jformattedtextfield的目的是在输入文本时编辑文本,以便不能添加无效字符。
有关更多信息和示例,请阅读swing教程中有关如何使用格式化文本字段的部分。你可能想看看 Mask Formatters .

ohtdti5x

ohtdti5x3#

if (match=false) 您正在分配 false 价值 match ,然后 if 检查它的值 false 跳过此块。
差不多 if(match=true) .
使用 if(match==false) 或者更好地避免错误 == 使用
if (!match) if(match==true) 或者更好 if(match) .

相关问题