永发信息网

请教个jFormattedTextField的输入问题

答案:2  悬赏:70  手机版
解决时间 2021-01-03 18:31
  • 提问者网友:低吟詩仙的傷
  • 2021-01-03 08:17
我现在想控制一个jFormattedTextField的输入
只允许输入一个数字,或者多个数字,用,分割。
如:11
11,22
1,3333,1

请问怎么实现?
个人认为要用到正则表达式,MaskFormatter类好像没办法实现我的要求。

有人能帮忙解决吗?最好能给代码,谢谢

感谢楼下2位的回答,我想问下,只能通过把值取出来再另写代码去判断吗?jFormattedTextField本身不能解决这个问题吗?
最佳答案
  • 五星知识达人网友:玩家
  • 2021-01-03 09:30
你要的伸缩性 MaskFormatter 没办法提供。就用简便的 regex 吧:

import javax.swing.*;

class RestrictEntryByRegex {
    public static void main(String[] args) throws Exception {
        JTextField jtf = new JTextField();
        while ( ! jtf.getText().matches("(\\d+|\\d+,)+"))
            JOptionPane.showMessageDialog(null, jtf,
                    "只接受数字和逗号", JOptionPane.PLAIN_MESSAGE);
        for (String num: jtf.getText().split(","))
            System.out.println(num);
    }
}

===============================================================================

必须在 JFormattedTextField 里处理的话,可以通过 DocumentFilter 截取并过滤字符输入。
下面这段代码声明的 tf 为例:

JFormattedTextField tf = new JFormattedTextField();
((AbstractDocument)tf.getDocument()).setDocumentFilter(new DocumentFilter() {
    public void replace(DocumentFilter.FilterBypass fb, int offset, int length,
            String text, AttributeSet attrs) throws BadLocationException {
        if (text.matches("\\d+|,"))
            super.replace(fb, offset, length, text, attrs);
    }
});

对了,jisonyu77,你可以提供更多你碰到的问题的细节吗?
全部回答
  • 1楼网友:孤独入客枕
  • 2021-01-03 09:44
import java.util.regex.pattern;public class patterntest {public static void main(string[] args) { string str="1a3";//需要判断的字符串 system.out.println(pattern.matches("^[0-9]+$", str));//判断是否符合全由数字组成,符合返回true,否则返回false}}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯