动态更改Eclipse工具栏图标

时间:2011-10-04 20:46:27

标签: java eclipse eclipse-plugin

我有一个带有自己图标的工具栏项,在plugin.xml文件中定义如下:

<action
class="MyActionClass"
id="MyActionID"
label="MyActionLabel"
menubarPath="MyActionMenuBarPath"
toolbarPath="MyActionToolBarPath"
icon="icon/myicon.png" <---- this one
     ...
</action>

如何在需要时动态更改此设置?我的意思是从代码中改变它

2 个答案:

答案 0 :(得分:5)

使用org.eclipse.ui.menus扩展点,然后使用动态添加 menuContribution 动态应该是ControlContribution的子类并实现createControl方法来创建按钮。

答案 1 :(得分:3)

您应该在implements课程中IElementUpdater Handler 请参阅:https://stackoverflow.com/a/23742598/2893073

  1. 处理程序类

    import java.util.Map;    
    import org.eclipse.core.commands.AbstractHandler;
    import org.eclipse.core.commands.ExecutionEvent;
    import org.eclipse.core.commands.ExecutionException;
    import org.eclipse.jface.resource.ImageDescriptor;
    import org.eclipse.ui.commands.IElementUpdater;
    import org.eclipse.ui.menus.UIElement;    
    import com.packpub.e4.menu.Activator;     
    public class SampleHandler2 extends 
                 AbstractHandler implements IElementUpdater{       
        private static ImageDescriptor image_enable = 
            Activator.getImageDescriptor("icons/btn_adapt_enable.png");
        private static ImageDescriptor image_disable = 
            Activator.getImageDescriptor("icons/btn_adapt_disable.png");        
        /**
         * The constructor.
         */
        public SampleHandler2() {
    
        }    
        /**
         * the command has been executed, so extract extract the needed information
         * from the application context.
         */
        public Object execute(ExecutionEvent event) throws ExecutionException {
            //...
            return null;
        }    
        @Override
        public void updateElement(UIElement element, @SuppressWarnings("rawtypes") Map map) {
            boolean condition = false;            
            //...            
            if( condition ) { 
                element.setIcon(image_disable);
            }else{
                element.setIcon(image_enable);
            }        
        }
    }
    
  2. 使用ICommandService

    调用此处理程序
        IWorkbenchWindow window = part.getSite().getWorkbenchWindow();
        ICommandService commandService = (ICommandService) window.getService(ICommandService.class);
        if (commandService != null) {
            commandService.refreshElements("com.packpub.e4.menu.commands.sampleCommand", null);
        }
    
  3. 感谢。