当特定文档的编辑器关闭时,我需要执行某些操作。我有以下代码:
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
}
有办法做到这一点吗?或者我至少可以为全局编辑器关闭 Hook 一个监听器,以便我收到每个编辑器窗口关闭的通知吗?我想在这种情况下,我将能够以某种方式决定给定的编辑器窗口是否是我感兴趣的窗口。
最佳答案
好吧,我找到了一个可行的解决方案,但是,它仍然感觉像是一个丑陋的解决方法。我不明白为什么 NetBeans IDE 的问题的所有解决方案看起来都那么难看。我可以看到该平台的目标是为创建新编辑器和其他可插入组件准备一个很好的空间,但是,当人们只想监听现有组件(编辑器等)时,它就变成了一场噩梦。
在我当前的解决方案中,我向 TopComponent 注册表添加了一个属性更改监听器,并监听要更改的“tcClosed”属性,然后测试它是否具有 EditorCookie(因此它是否是编辑器)以及 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
}
}
}
});
但是,如果有人知道更好的解决方案,我会很高兴听到。
关于java - 如何在 Netbeans 中为特定编辑器添加关闭事件的钩子(Hook)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25916215/