Java 如何通过DataObject API获得有关NetBeans中文件内容更改的通知

Java 如何通过DataObject API获得有关NetBeans中文件内容更改的通知,java,netbeans-platform,netbeans-7.3,Java,Netbeans Platform,Netbeans 7.3,我正在尝试为我的NetBeans模块实现一个NavigatorPanel。 现在,每当修改关联的数据对象时,我都希望得到通知,以便调用解析器并更新导航器 我尝试向DataObject添加PropertyChangeListener,但这只会通知我文档的第一次更改,仅此而已。但是,我注意到第一次调用PropertyChangeListener.propertyChange()方法时,propertyName设置为“COOKIE”,第二次设置为“MODIFIED” 当编辑器中的文档内容(而不是底层文

我正在尝试为我的NetBeans模块实现一个NavigatorPanel。 现在,每当修改关联的数据对象时,我都希望得到通知,以便调用解析器并更新导航器

我尝试向DataObject添加PropertyChangeListener,但这只会通知我文档的第一次更改,仅此而已。但是,我注意到第一次调用PropertyChangeListener.propertyChange()方法时,propertyName设置为“COOKIE”,第二次设置为“MODIFIED”

当编辑器中的文档内容(而不是底层文件对象!)发生更改时,如何始终获得通知

编辑: 我已经看过了。它们声明PropertyChangeListener用于获取有关正在保存的文档的通知(例如,通过Ctrl+S),如果希望获得有关内容修改的通知,则应使用FileChangeListener。但这对我不起作用。在任何一种情况下,当我在编辑器中修改文档时,我都不会收到通知,除非使用PropertyChangeListener,然后我会收到通知,但只有在我第一次编辑某些内容时才会收到通知(与他们在常见问题解答中编写的内容完全相反)

EDIT2: 我还不知道如何得到适当的通知。但在我的例子中,我实际上应该从另一个角度接近我的目标,也就是说,因为我想根据解析结果更新NavigatorPanel,所以我可能应该注册一个ParserResultTask。这样,我就可以定义何时应该得到通知,当我得到通知时,我还可以得到更新面板所需的已解析结果


嗯,这不是对实际问题的直接回答,而是对这个特定问题的更合适的解决方案。

这里有一些对我有用的东西。请注意,只有在保存更改时才会触发事件。请注意,下面的代码可能编译得不好,因为我删除了代码以使其简洁。但这和在数据对象上实现FileChangeListener一样简单。Geertjan不久前写了一篇关于这个的博客文章。让我知道进展如何

编辑

没关系,我忘了你不想处理FileObject。这里是一个netbeans论坛帖子


你说你已经看过了吗@谢谢你。见编辑。谢谢,很接近,但不是我想要的。然而,一路上我意识到了一些事情。请参阅第一篇文章中的我的编辑2。
public class YourDataObject extends MultiDataObject implements FileChangeListener {


    public YourDataObject(FileObject pf, MultiFileLoader loader) throws DataObjectExistsException, IOException {
        super(pf, loader);
        pf.addFileChangeListener(this);
        registerEditor("text/x-puml", true);
    }

    @Override
    protected int associateLookup() {
        return 1;
    }


    @Override
    public void fileFolderCreated(FileEvent fe) {}

    @Override
    public void fileDataCreated(FileEvent fe) {}

    @Override
    public void fileChanged(FileEvent fe) {
        System.out.println("Here =========== :" + fe);
    }

    @Override
    public void fileDeleted(FileEvent fe) {}

    @Override
    public void fileRenamed(FileRenameEvent fre) {}

    @Override
    public void fileAttributeChanged(FileAttributeEvent fae) {}
}