【问题标题】:what should I do when DocumentFilter not listening for changes?当 DocumentFilter 不监听更改时我该怎么办?
【发布时间】:2013-11-24 18:46:59
【问题描述】:

您好,我有以下代码:

      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 insert the string: 。不是这种情况。我应该怎么做才能让程序在每个按下的字符上触发并处理它并显示在屏幕上?

【问题讨论】:

  • 添加一个SSCCE,它必须是在一些基本的东西不起作用的情况下

标签: java swing jtextarea documentfilter


【解决方案1】:

检查您是否以您需要的方式“覆盖”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();                                                                                                                                                            
  }                                                                                                                                                                                   
}    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-24
    • 2019-12-27
    • 2015-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-10
    • 1970-01-01
    相关资源
    最近更新 更多