gpt4 book ai didi

java - DocumentFilter 的每个方法(及其参数)到底做什么?

转载 作者:行者123 更新时间:2023-12-01 21:55:46 24 4
gpt4 key购买 nike

我一直在努力理解这个 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 的了解,看看我是否也能解决这个问题。

最佳答案

当您在 JTextComponent 中输入文本时,DocumentFilterreplace(...) 方法将被调用。这是因为 JTextComponentreplaceSelection(...) 方法最终由文本插入操作调用。

如果使用 DocumentinsertString(...) 方法将文本直接插入到 Document 中,则 将调用 DocumentFilter 的 insertString(...) 方法。

关于java - DocumentFilter 的每个方法(及其参数)到底做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34347315/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com