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 我希望它有所帮助 乌迪 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |