Java 如何切换Eclipse插件的菜单按钮图标和工具提示文本?

Java 如何切换Eclipse插件的菜单按钮图标和工具提示文本?,java,eclipse,plugins,eclipse-rcp,Java,Eclipse,Plugins,Eclipse Rcp,我正在开发一个Eclipse插件,它有一个工具栏菜单项,可以启用/禁用一个特性。我知道如何使用plugin.xml文件为其设置图标和工具提示文本,但我希望能够根据正在处理的项目的状态更改图标,尤其是工具提示文本。也就是说,如果功能未启用,我需要一个显示打开功能的图标以及显示“启用功能”的工具提示文本,但如果功能启用,我需要一个显示关闭功能的图标以及显示“禁用功能”的工具提示文本。现在,我能看到的唯一选项是一个通用图标和工具提示文本,上面写着“启用/禁用功能”,但我觉得这很笨拙 编辑添加:作为对i

我正在开发一个Eclipse插件,它有一个工具栏菜单项,可以启用/禁用一个特性。我知道如何使用plugin.xml文件为其设置图标和工具提示文本,但我希望能够根据正在处理的项目的状态更改图标,尤其是工具提示文本。也就是说,如果功能未启用,我需要一个显示打开功能的图标以及显示“启用功能”的工具提示文本,但如果功能启用,我需要一个显示关闭功能的图标以及显示“禁用功能”的工具提示文本。现在,我能看到的唯一选项是一个通用图标和工具提示文本,上面写着“启用/禁用功能”,但我觉得这很笨拙


编辑添加:作为对indigomonkey的回答的回应,这是一个基于我最初写的很好的回答,我想澄清一下,工具栏按钮正在启用的行为是我们真正不鼓励一旦启用就禁用的行为(启用时会弹出一个对话框,以验证他们是否希望启用它,因为它不应轻易启动,也会阻止他们在启用后禁用它)。因此,我希望图标更改为建议“不要单击我”的图标.

我建议您选择将工具栏贡献创建为“复选框”类型,而不是标准的“按下”。这意味着按钮将在选定和未选定状态之间切换,允许您将此行为等同于功能的启用和禁用状态

如果您正在使用
org.eclipse.ui.commands
org.eclipse.ui.handlers
以及
org.eclipse.ui.menu
扩展点为按钮添加
元素,则需要将其
style
属性设置为
check
。然后您可以读取命令的选择并从我在处理器里面


有关更多信息,请参阅。

如果您的命令处理程序实现了
IElementUpdater
,则每当运行命令时都将调用
updateElement
方法


updateElement
UIElement
参数具有
setIcon
setTooltip
方法。

在rcp E4中,解决方案似乎有点不同。由于我第一次偶然遇到这个问题,我想总结/链接该解决方案,以供未来的开发人员使用

我在哪里找到答案的相关问题是和

基本上,您需要向Execute方法添加参数MToolItem,如下所示:

@Execute
public void execute(final MToolItem item)
{
   item.setIconURI("platform:/plugin/......");
   //additional changes e.g. to the tooltip are also possible.
}
如果您另外选中了工具栏按钮类型

 <elements xsi:type="menu:HandledToolItem" type="Check" ...

我正在使用toggleState,但我看不出有任何方法可以基于它来更改工具提示文本或按钮图标的行为。我明白了。一般来说,Eclipse生态系统不会做这种事情。通过使用toggle按钮,您无需更改图标或工具提示。相反,它们应该在按钮被切换时参考行为例如,在任何包含调试透视图的Eclipse中都可以看到“跳过所有断点”按钮。它的图标(一个划掉的断点)指的是当它被打开时发生的事情,以及它的工具提示。如果相反,图标改为未划掉的断点,而工具提示改为“不要跳过所有断点”,行为会令人困惑。你的解释很好,indigomonkey。我已经相应地更新了我的问题。很好,尽管我还必须添加代码来触发事件,使用我在这里找到的东西:我有一个
类DeployHandler
,它
扩展了AbstractHandler
,并且
使用imp实现了IElementUpdater
updateElement
if(proj==null)元素.setTooltip(“使用选定项目”);else元素.setTooltip(“使用项目\”+proj.getName()+“\”);
但是框架没有调用它,尽管处理程序得到了正确的注册和调用。你能帮我找出原因吗?显然,我还缺少一些触发更新事件的代码。我应该用什么方法调用
ICommandService#refreshElements
?@DannyLo不要尝试在注释中添加后续问题-问一个新问题。谢谢@BenHocking-虽然原来的链接不再有效,但在