4

\这里是 JTextField 的创建:

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

这是我的文档过滤器:

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 个小时。

4

1 回答 1

8

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

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

text.replaceAll("[^0-9.]", "")
于 2012-08-07T03:43:59.083 回答