如何解决如何在Java中实现JTextField类以仅允许输入数字?
| 如何用Java(JTextField
class)实现只允许输入数字?
解决方法
将DocumentFilter添加到JTextField中使用的(普通)Document中,以避免出现非数字。
PlainDocument doc = new PlainDocument();
doc.setDocumentFilter(new DocumentFilter() {
@Override
public void insertString(FilterBypass fb,int off,String str,AttributeSet attr)
throws BadLocationException
{
fb.insertString(off,str.replaceAll(\"\\\\D++\",\"\"),attr); // remove non-digits
}
@Override
public void replace(FilterBypass fb,int len,AttributeSet attr)
throws BadLocationException
{
fb.replace(off,len,attr); // remove non-digits
}
});
JTextField field = new JTextField();
field.setDocument(doc);
,使用JFormattedTextField
。
http://download.oracle.com/javase/tutorial/uiswing/components/formattedtextfield.html
,使用Document
实现,其insertString
方法过滤掉非数字字符。
,使用此类,并在需要验证的地方调用它,将jtexField名称作为参数传递。
exm:- setNumericOnly(txtMSISDN); here txtMSISDN is my jtextField.
public static void setNumericOnly(JTextField jTextField){
jTextField.addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent e) {
char c = e.getKeyChar();
if ((!Character.isDigit(c) ||
(c == KeyEvent.VK_BACK_SPACE) ||
(c == KeyEvent.VK_DELETE))) {
e.consume();
}
}
});
}
,试试这个DocumentFilter
:
import javax.swing.text.*;
import java.awt.*;
public class IntegerDocumentFilter extends DocumentFilter
{
private AbstractDocument abstractDocument;
private IntegerDocumentFilter(AbstractDocument abstractDocument)
{
this.abstractDocument = abstractDocument;
}
@Override
public void replace(FilterBypass filterBypass,int offset,int length,String input,AttributeSet attributeSet)
throws BadLocationException
{
int inputLength = input.length();
String text = abstractDocument.getText(0,abstractDocument.getLength());
int newLength = text.length() + inputLength;
if (isNumeric(input) && newLength <= 8)
{
super.replace(filterBypass,offset,length,input,attributeSet);
} else
{
Toolkit.getDefaultToolkit().beep();
}
}
private boolean isNumeric(String input)
{
String regularExpression = \"[0-9]+\";
return input.matches(regularExpression);
}
public static void addTo(JTextComponent textComponent)
{
AbstractDocument abstractDocument = (AbstractDocument) textComponent.getDocument();
IntegerDocumentFilter integerDocumentFilter = new IntegerDocumentFilter(abstractDocument);
abstractDocument.setDocumentFilter(integerDocumentFilter);
}
}
用法:
IntegerDocumentFilter.addTo(myTextField);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。