gpt4 book ai didi

java - 使用文件的 ActionProvider - Eclipse CNF

转载 作者:太空宇宙 更新时间:2023-11-04 06:52:26 24 4
gpt4 key购买 nike

我正在编写一个插件,它创建一个自定义Package Explorer,它代表不同层次结构中的底层文件系统层次结构(某种虚拟文件夹)。

我成功地通过实现ITreeContentProvider创建了层次结构。最终的节点应该代表一个包含所有操作的文件(打开、复制、重命名...),当我返回org.eclipse.core.internal.resources.File的实例时它效果很好,但是如果我创建一个实现IFile接口(interface)的delegate/proxy类,我会看到该操作,但是当我单击其中一个操作时,Eclipse会卡住.

无论如何,我想我需要实现我自己的CommonActionProvider。我的问题是:如何将相同的操作添加到节点,该节点将代表文件上的操作,是否有 FileActionProvider?

enter image description here

我正在遵循以下教程:tutorial

更新

我尝试按照 @greg-449 的建议搞乱适配器。但是,他们都没有给我完整的菜单,我得到的最大菜单只是实现 IAdaptable 接口(interface)并将 getAdapter() 委托(delegate)给我的 IFile 实例。但这样做双击打开文件不起作用,最重要的是重命名、删除、移动都不在这里

menu I got by delegating the getAdapter

我通过委托(delegate)getAdapter()获得的菜单

最佳答案

您应该使用 IAdapterFactory 来提供从 UI 类到底层 IFile 的适配器,而不是尝试实现 IFile

使用org.eclipse.core.runtime.adapters扩展点声明适配器工厂:

 <extension point="org.eclipse.core.runtime.adapters">
<factory
class="com.xyz.MyFileAdapterFactory"
adaptableType="com.xyz.MyFile">
<adapter type="org.eclipse.core.resources.IFile"/>
</factory>
</extension>

适配器工厂类方法看起来像:

@Override
public Object getAdapter(Object adaptableObject, Class adapterType)
{
if (adaptableObject instanceof MyFile)
{
// TODO get the IFile from MyFile
return ifile;
}

return null;
}

@Override
public Class<?> [] getAdapterList()
{
return new Class<?> [] {IFile.class};
}

您可能还需要注册 IResource 才能使所有菜单项正常工作。

您还可以使用 IAdapterManager 接口(interface)注册工厂。

关于java - 使用文件的 ActionProvider - Eclipse CNF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23168902/

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