java - Eclipse 插件 : Creating a dynamic menu and corresponding handler?

标签 java eclipse eclipse-plugin eclipse-pde

我正在尝试编写一个我认为非常简单的 Eclipse 插件,但我真的很难找到解决方法,因为我以前从未使用过 PDE。

基本上我想做的是向 Java 项目上下文菜单添加一个子菜单,该菜单将列出项目根目录中的一堆可用文件。然后在选择这些子菜单项之一时,我希望调用处理程序并传递所选文件的名称。

到目前为止,我已经通过向 org.eclipse.ui.menus 扩展点添加动态 menuContribution 来使菜单正确显示。我已经定义了我自己的 CompoundContributionItem,它在适当的目录中找到所有文件并填充菜单。这些菜单项中的每一个都连接到我的处理程序(扩展 AbstractHandler),并且每次选择菜单项时都会调用处理程序。我不知道该怎么做是让我的处理程序根据选择的菜单项实际执行某些操作。如果它以某种方式传递菜单项标签的字符串就足够了,但我猜可能有更好的方法来做到这一点。

我试着查看 org.eclipse.debug.ui 的代码,看看他们是如何使用运行/调试配置的,因为这正是我想要的。他们从项目的 .launches 目录中选取 .launch 文件并将它们显示在列表中。虽然它的代码非常复杂,并且有很多与它无关的其他行为,所以作为一个初学者,我正在努力理解它。此外,他们似乎采用了与我不同的方式,所以我的方法可能完全错误。任何帮助或指点将不胜感激。

最佳答案

我终于自己找到了答案。在 plugin.xml 中,可以为每个命令指定参数,例如

<commandParameter
    id="commandParameterID"
    name="Name of the Parameter"
    optional="false">
</commandParameter>

现在,当我动态创建每个菜单项时,我可以将我的参数添加到 CommandContributionItemParameter 对象的参数映射中。

CommandContributionItemParameter param = new CommandContributionItemParameter(PlatformUI.getWorkbench(), null, "CommandID", CommandContributionItem.STYLE_PUSH);
param.parameters = new HashMap<String, String>();
param.parameters.put("commandParameterID", "TheValue");

以这种方式添加的参数可以在处理程序类中访问,如下所示:

public Object execute(ExecutionEvent event) throws ExecutionException {
    System.out.println(event.getParameter("commandParameterID"));
    return null;
}

关于java - Eclipse 插件 : Creating a dynamic menu and corresponding handler?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6876033/

相关文章:

java - 升级环境以将 JasperReports 与 Java 8 和新的 jdt 编译器一起使用后出现异常

java - Raspberry Pi MAX31865 Python 到 Java 的转换

java - Libgdx - 帧缓冲区的纹理渲染到屏幕时的不同大小

java - 如何检查我使用的是哪个版本的 Eclipse 编译器?

java - 尝试将 Neo4j 添加到 eclipse 中

java - Java 中的正则表达式性能——复杂的少还是简单的多好?

android - Proguard Android 使用 Action Bar Sherlock

java - 为什么不允许在 FQN 上使用 @NonNull 注解?

eclipse-plugin - Eclipse RCP : How to order perspective buttons belonging to different plugins?

java - Maven + Eclipse : how to disable fetch of all versions