编程语言
首页 > 编程语言> > java-Eclipse插件:创建动态菜单和相应的处理程序?

java-Eclipse插件:创建动态菜单和相应的处理程序?

作者:互联网

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

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

到目前为止,我已经通过向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对象的参数Map中即可.

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;
}

标签:eclipse-pde,eclipse,eclipse-plugin,java
来源: https://codeday.me/bug/20191102/1990846.html