java - 如何在 Netbeans 中为特定编辑器添加关闭事件的钩子(Hook)?

标签 java netbeans netbeans-platform netbeans-plugins

当特定文档的编辑器关闭时,我需要执行某些操作。我有以下代码:

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/

相关文章:

java - 如何为在 Java 中启动的 nogui 进程创建控制台窗口?

netbeans - 如何在 Netbeans "Show Non-printable Characters"模式下仅显示没有 ¶ 的空格 (...)?

c - 在 ubuntu 中运行程序时 Netbeans 权限被拒绝

java - Netbeans Plattform - 品牌不适用于创建的安装程序

Java AWT 组件和面板填充/边框

java - 如何为 List<Long> 元素声明 JaxBElement?

java - 如何将 JTextField 和 JCheckBox 添加到 ArrayList 对象

c++ - Netbeans 不包括 glib.h ,即使它存在,如自动完成所示。该怎么办?

java - Netbeans 平台应用程序中的 FileChooserBuilder 丢失?

java - 基于 NetBeans 平台构建的 Web Start 应用程序不会创建桌面快捷方式和开始菜单项