DocumentListener没有调用insertUpdate方法

时间:2015-08-05 12:53:07

标签: java swing events documentlistener focuslistener

我正在为我的类添加一些自定义侦听器,但文档事件未触发。为什么呢?

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在底部显示一个红色的msg,表示

  

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

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

这没有任何意义。

我必须再次使用focusGained方法添加文档管理器..

    @Override
    public void focusGained(FocusEvent e) {

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