如何解决JTextArea仅包含数字,但允许使用负值
尝试修改正则表达式(int验证方法containsOnlyNumbers)。
Pattern pattern = Pattern.compile("^[\\-\\+]?\\d+(\\.\\d+)?$");
这将接受以下数字:
- 1234
- -1234
- +1234
- 1234.1234
希望对您有所帮助
乌迪
解决方法
我有一个JTextArea,它只需要接受数字。这是我的代码:
DocumentFilter onlyNumberFilter = new AxisJTextFilter();
final JTextArea areaTextoXMin = new JTextArea(String.valueOf(xMin));
((AbstractDocument)areaTextoXMin.getDocument()).setDocumentFilter(onlyNumberFilter);
对正数有效,但对负数无效。我该如何解决?
编辑:抱歉,在Internet上找到了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;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。