0

平台:Windows 8.1 Pro、E4 和 e(fx)clipse

我目前正在缓存打开的部件以在重新加载 PartStack 时重新打开。这种重新加载方法使用 EPartService.hidePart() 来关闭 PartStack 中的所有 Part。由于我还需要从缓存中删除部件,因此我需要区分重新加载和实际关闭选项卡/部件。

我已经尝试通过从 Part 的 preDestroy() 方法发送事件再次将其添加到缓存中,然后再次将其删除。但这并不理想。

单击关闭图标或其他可以检查的方式时,我可以捕捉到特殊事件吗?

谢谢你的帮助。

4

1 回答 1

1

事实证明,做我想做的最简单的方法是使用标签。由于我只能访问程序关闭零件时的代码,因此我需要在零件上设置标签。

if (part.isDirty()) {
    if(!partService.savePart(part, true)) {
        return;
    }
    part.getTags().add(Tag.PART_CLOSED_BY_PROGRAM);
    partService.hidePart(part);
    } else if (part.isCloseable()) {
        part.getTags().add(Tag.PART_CLOSED_BY_PROGRAM);
        partService.hidePart(part);
    }
}

现在我可以检查 preDestroy() 方法是否正在由程序或用户关闭部件。

@PreDestroy
protected void preDestroy() {
    if (part.getTags().contains(Tag.PART_CLOSED_BY_PROGRAM)) {
        part.getTags().remove(Tag.PART_CLOSED_BY_PROGRAM);
    } else {
        try {
            //remove "Part" from cache
        } catch (IllegalAccessException e) {
        } catch (InvocationTargetException e) {
        } catch (NoSuchMethodException e) {
        }
    }
}
于 2016-05-10T07:25:54.347 回答