3

我想创建一个简单的 Eclipse 插件,它可以:当你右键单击一个 java 项目时,它会显示一个弹出菜单,其中有一个标签为“N java files found in this project”的项目,其中“N”是文件数.

我有一个想法,我可以更新“selectionChanged”中的标签:

public class CountAction implements IObjectActionDelegate {
    public void selectionChanged(IAction action, ISelection selection) {
        action.setText(countJavaFiles());
    }
}

但是,如果我不单击该菜单项,它将不起作用,因为CountAction尚未加载,因此selectionChanged在您右键单击项目时不会调用该菜单项。

我在这方面花了很多时间,但没有解决。请帮我。

4

2 回答 2

2

@kett_chup 建议的文章的替代方法是使用IElementUpdater. 简单地

  • handler必须实施IElementUpdater
  • handler.updateElement((UIElement element, Map parameters)必须使用设置所需的文本-element.setText("new text")此新文本将显示在菜单和工具栏中
  • 每当您需要/想要使用ICommandService.refreshElements(String commandId, Map filter)您的特定命令 ID 更新命令文本时 - 全局命令服务通常就可以了

IElementUpdater界面还可用于更改选中状态 - 对于带有的命令style=toggle- 以及图标和工具提示。

于 2011-07-09T20:38:58.327 回答
0

最后,我找到了一种非常简单的方法来实现这一点:

我不需要更改我的代码(有问题的示例代码),但我需要添加一个startup小类:

import org.eclipse.ui.IStartup;

public class MyStartUp implements IStartup {

    @Override
    public void earlyStartup() {
        // Initial the action
        new CountAction();
    }
}

并将以下内容添加到plugin.xml

<extension
     point="org.eclipse.ui.startup">
  <startup
        class="myplugin.MyStartUp">
  </startup>

MyStartUp将在启动时加载该操作的一个实例,然后selectionChanged在每次我右键单击项目或文件时调用。

于 2011-07-15T04:41:21.913 回答