gpt4 book ai didi

java - DocumentFilter 不监听变化怎么办?

转载 作者:行者123 更新时间:2023-11-29 05:33:50 25 4
gpt4 key购买 nike

您好,我有以下代码:

      AbstractDocument d = (AbstractDocument)editorText.getDocument();
d.setDocumentFilter(new myFilter());

其中 editorText 是一个 JTextArea。我的 DocumentFiler 定义如下:

private class myFilter extends DocumentFilter{
public void insertString(DocumentFilter.FilterBypass fb,
int offset,
String string,
AttributeSet attr){
System.out.print("insert invoked");
try {
super.insertString(fb, offset, "; You inserted the string: "+string, attr);
} catch (BadLocationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void replace(DocumentFilter.FilterBypass fb,
int offset,
String string,
AttributeSet attr){
System.out.print("replace invoked");
try {
super.insertString(fb, offset, "; You inserted the string: "+string, attr);
} catch (BadLocationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

我希望代码按如下方式工作:如果键入一个字符,那么预期的是必须触发 insertString 函数,并且必须在屏幕上看到的是 ;you inserted the string: 。不是这种情况。我应该怎么做才能让程序在按下每个字符时触发并处理它并显示在屏幕上?

最佳答案

检查您是否“覆盖”了 DocumentFilter 的所有方法以你需要的方式。至少在方法中 replace(...)我注意到您错过了 int length 参数。我建议将其更改为:

public void replace(DocumentFilter.FilterBypass fb, int offset, int length, String string, AttributeSet attr){
System.out.print("replace invoked");
try {
super.insertString(fb, offset, "; You inserted the string: "+string, attr);
} catch (BadLocationException e) {
e.printStackTrace();
}
}

关于java - DocumentFilter 不监听变化怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20179370/

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