当特定文档的编辑器关闭时,我需要做一些事情。我有以下代码:
FileObject fobj = FileUtil.toFileObject(file);
final DataObject dobj = DataObject.find(fobj);
if (dobj != null) {
EditorCookie ec = dobj.getLookup().lookup(EditorCookie.class);
StyledDocument doc = ec.openDocument();
// Here I would like to add a listener for close event, for the editor window that was opened
}
有办法做到这一点吗?或者,我至少可以为全局编辑器关闭挂接一个侦听器,以便收到每个编辑器窗口关闭的通知吗?我想在这种情况下,我将能够以某种方式决定给定的编辑器窗口是否是我感兴趣的窗口。
好吧,我找到了一个可行的解决方案,但它仍然是一个丑陋的解决方案。我不明白为什么所有解决我的NetBeansIDE问题的方案看起来如此丑陋。我可以看到,该平台旨在为创建新的编辑器和其他可插入组件准备一个良好的空间,然而,当一个人只想收听现有组件(编辑器等)时,这就变成了一场噩梦。
在我目前的解决方案中,我向TopComponent注册表添加了一个属性更改侦听器,并侦听要更改的"tcClosed"属性,然后我测试它是否有EditorCookie(因此它是否是编辑器),以及cookie是否与我想侦听的cookie相同:
TopComponent.getRegistry().addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
if (evt.getPropertyName().equals("tcClosed") && evt.getOldValue() == null) {
EditorCookie cookie = ((TopComponent) evt.getNewValue()).getLookup().lookup(EditorCookie.class);
// I have to remember editor cookie to compare it to the one that is closed
// so that I can find out whether it is the editor I want to listen to
if (cookie != null && cookie.equals(ParentClass.this.getRememberedEditorCookie())) {
// Do my stuff
}
}
}
});
然而,如果有人知道更好的解决方案,我会很高兴听到它。
我偶然发现了一些可能对你有帮助的东西:
EditorCookie.Observable cookie = dataObject.getLookup().lookup(EditorCookie.Observable.class);
cookie.addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
// Do your stuff
}
});