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