【发布时间】:2015-12-18 01:46:15
【问题描述】:
我一直在努力解决这个 DocumentFilter 业务,就在我觉得自己基本了解它的时候,我尝试了一个简单的测试用例,但没有任何意义。
所以最初的目标是创建一个简单的 DocumentFilter 来只允许数字,包括小数。我做了一些研究并阅读了 StackOverflow 上已经存在的一些帖子,这些帖子非常详细地描述了这个过程。感谢那些发帖的人。我还第一次阅读了 Regex,并且对它的多功能性感到震惊。
继续前进,我编写(主要是复制)其中一个示例并在我的程序上进行了尝试,但由于某种原因它无法正常工作。我决定回归基础,尝试一个非常简单的 DocumentFilter 子类:
public class SomeFilter extends DocumentFilter {
public void insertString(FilterBypass fb, int offs, String str,
AttributeSet a) throws BadLocationException {
if (str.matches("B")) super.insertString(fb, offs, str, a);
}
public void replace(FilterBypass fb, int offs, int len, String str,
AttributeSet a) throws BadLocationException {
if (str.matches("A")) super.replace(fb, offs, len, str, a);
}
}
这才是真正让我失望的地方。从 oracle 文档中,我读到 insertString 是插入内容(我假设光标在哪里),replace 是替换(例如复制和粘贴)。现在很明显我在这里误解了一些东西,因为我使用 setDocumentFilter 的 JTextField 只允许我“插入”A 而不是 B。有人可以解释一下这些方法的实际工作原理吗?
如果我能解决这个问题,我稍后会发布我对实际 IntegerFilter 所做的事情,看看我是否也能解决这个问题。
【问题讨论】:
标签: java swing documentfilter