DocumentListener 没有调用 insertUpdate 方法

Posted

技术标签:

【中文标题】DocumentListener 没有调用 insertUpdate 方法【英文标题】:DocumentListener not calling insertUpdate method 【发布时间】:2015-10-28 06:22:05 【问题描述】:

我正在向我的班级添加一些自定义侦听器,但没有触发文档事件。为什么?

public class MyClass
        MyCustomListener mcl = new MyCustomListener();          
        for(int i = 0; i < MAX; i++) 
                    getTxt_ppu().add(new CustomTextField(40));
                    getTxt_ppu().get(i).getDocument().addDocumentListener(mcl);
                    getTxt_ppu().get(i).addFocusListener(mcl);
        
        //...Some code....
        private class MyCustomListener implements DocumentListener, FocusListener, Serializable 
            int index;

            @Override
            public void focusGained(FocusEvent e) 

                 System.out.println("Focus");
            

            @Override
            public void focusLost(FocusEvent e) 
            

            @Override
            public void insertUpdate(DocumentEvent e) 
                System.out.println("a");

            

            @Override
            public void removeUpdate(DocumentEvent e)      
            

            @Override
            public void changedUpdate(DocumentEvent e)     
            
        

执行并单击我的CustomTextField 时,它确实会显示在控制台“Focus”中,但是当我在文本字段中输入内容时,“a”永远不会打印出来。 当我在insertUpdate 方法中输入内容时,eclipse 会在底部显示一条红色消息,上面写着

"MyClass.MyCustomListener 类型的方法 insertUpdate(DocumentEvent) 必须 覆盖或实现超类型方法"

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

您的代码看起来不错,我的意思是至少您添加文档事件侦听器部分没有任何问题。看看演示比较你做了什么,你可能会发现问题:

https://docs.oracle.com/javase/tutorial/displayCode.html?code=https://docs.oracle.com/javase/tutorial/uiswing/examples/events/DocumentEventDemoProject/src/events/DocumentEventDemo.java

【讨论】:

【参考方案2】:

这毫无意义。

我不得不再次从 focusGained 方法添加DocumentListener..

    @Override
    public void focusGained(FocusEvent e) 

        Object o = e.getSource();
        if(o instanceof CustomTextField)   
            ((CustomTextField)o).getDocument().addDocumentListener(mcl);
        
    

【讨论】:

以上是关于DocumentListener 没有调用 insertUpdate 方法的主要内容,如果未能解决你的问题,请参考以下文章

使用 Java DocumentListener 的更聪明的方法

如何知道啥 JTextField 进入 DocumentListener

使用 DocumentListener 实现检查 JTextField

DocumentListener 无法正常工作

JTextArea DocumentListener 问题

从 DocumentListener 获取更改的文本