gpt4 book ai didi

java - 如何使用 DataObject API 获得有关 NetBeans 中文件内容更改的通知

转载 作者:行者123 更新时间:2023-11-30 11:32:38 24 4
gpt4 key购买 nike

我正在尝试为我的 NetBeans 模块实现 NavigatorPanel。现在,只要关联的 DataObject 被修改,我总是会收到通知,以便我可以调用解析器并更新导航器。

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

关于如何在编辑器中的文档内容(而不是底层 FileObject!)发生变化时总是得到通知的任何想法?

编辑:我已经看过 http://wiki.netbeans.org/DevFaqListenForSaveEvents .他们声明 PropertyChangeListener 用于获取有关正在保存的文档的通知(例如,通过 Ctrl+S),如果想要收到有关内容修改的通知,则应改用 FileChangeListener。但这对我不起作用。在任何一种情况下,当我在编辑器中修改文档时都不会收到通知,除了使用 PropertyChangeListener 时,我确实会收到通知,但只有在我第一次编辑某些内容时(与他们在常见问题)。

编辑 2:我还没有想出如何得到适当的通知。但就我而言,我实际上应该从不同的角度来实现我的目标,即因为我想根据解析结果更新 NavigatorPanel,所以我可能应该注册一个 ParserResultTask。通过它,我可以定义何时应该收到通知,以及何时收到通知我也会得到更新面板所需的已解析结果。

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

最佳答案

这是对我有用的东西。请注意,只有在您保存更改时才会触发事件。请注意,下面的代码可能无法很好地编译,因为我删除了我的代码以使其简洁。但它就像在 DataObject 上实现 FileChangeListener 一样简单。 Geertjan 不久前就此发表了一篇博文。让我知道事情的后续。

https://blogs.oracle.com/geertjan/entry/org_openide_filesystems_filechangelistener

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) {}
}

编辑

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

http://forums.netbeans.org/ptopic7909.html

关于java - 如何使用 DataObject API 获得有关 NetBeans 中文件内容更改的通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16556570/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com