DocumentFilter只允许数字和句点(。)进入JTextField?

时间:2012-08-07 03:06:24

标签: java swing jtextfield replaceall documentfilter

\这是JTextField的创建:

hourlyWageInput = new JTextField("7.25");
DocumentFilter filter = new UppercaseDocumentFilter();
((AbstractDocument) hourlyWageInput.getDocument()).setDocumentFilter(filter);
hourlyWageInput.setHorizontalAlignment(JTextField.CENTER);
add(hourlyWageInput);

这是我的DocumentFilter:

import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;

public class UppercaseDocumentFilter extends DocumentFilter {

 public void replace(DocumentFilter.FilterBypass fb, int offset, int length,
      String text, javax.swing.text.AttributeSet attr)

      throws BadLocationException {
           fb.insertString(offset, text.replaceAll("\\D", ""), attr);   
 }
}

这会自动删除JTextField中的所有字母和字符。

然而,我想知道是否有人知道所有命令类似于“\ D”的地方。我花了一段时间才找到正确的信息。

此外,我现在的代码也阻止了。当我正在与双打合作时,我需要的类型。有什么想法吗?

谢谢!令人惊讶的是,我今天学到了多少。我已经连续13个小时编码了。

1 个答案:

答案 0 :(得分:7)

replaceAll函数采用正则表达式。您可以在线学习许多教程中的正则表达式(请参阅@Hovercraft Full Of Eels评论)或直接从Java API中学习:http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html

基本上,您可以将任何正则表达式构造(在上面的链接中列出)组合在一起以形成正则表达式。例如,如果你想确保只有0-9和。允许,您可以使用:

text.replaceAll("[^0-9.]", "")