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

java – JTextArea仅包含数字,但允许负值

发布时间:2020-12-15 08:44:01 所属栏目:Java 来源:网络整理
导读:我有一个JTextArea,只需要接受数字.这是我的代码: DocumentFilter onlyNumberFilter = new AxisJTextFilter(); final JTextArea areaTextoXMin = new JTextArea(String.valueOf(xMin)); ((AbstractDocument)areaTextoXMin.getDocument()).setDocumentFilter
我有一个JTextArea,只需要接受数字.这是我的代码:

DocumentFilter onlyNumberFilter = new AxisJTextFilter();
    final JTextArea areaTextoXMin = new JTextArea(String.valueOf(xMin));
    ((AbstractDocument)areaTextoXMin.getDocument()).setDocumentFilter(onlyNumberFilter);

适用于正数,但不适用于负数.我该如何解决这个问题?

编辑:对不起,AxisJTextFilter是在互联网上找到的,我忘记了.它的代码是:

import javax.swing.text.*;
import java.util.regex.*;

public class AxisJTextFilter extends DocumentFilter
{
    public void insertString(DocumentFilter.FilterBypass fb,int offset,String text,AttributeSet attr) throws BadLocationException
    {
        StringBuilder sb = new StringBuilder();
        sb.append(fb.getDocument().getText(0,fb.getDocument().getLength()));
        sb.insert(offset,text);
        if(!containsOnlyNumbers(sb.toString())) return;
        fb.insertString(offset,text,attr);
    }
    public void replace(DocumentFilter.FilterBypass fb,int length,fb.getDocument().getLength()));
        sb.replace(offset,offset + length,text);
        if(!containsOnlyNumbers(sb.toString())) return;
        fb.replace(offset,length,attr);
    }
    public boolean containsOnlyNumbers(String text)
    {
        Pattern pattern = Pattern.compile("d*(.d{0,3})?");
        Matcher matcher = pattern.matcher(text);
        boolean isMatch = matcher.matches();
        return isMatch;
    }
}

解决方法

尝试修改正则表达式(int验证方法containsOnlyNumbers).

Pattern pattern = Pattern.compile("^[-+]?d+(.d+)?$");

这将接受以下数字:

> 1234
> -1234
> 1234
> 1234.1234

我希望它有所帮助

乌迪

(编辑:李大同)

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

    推荐文章
      热点阅读