2011-10-04 86 views

回答

3

您应该implementsIElementUpdater在您的Handler类。
请参考:https://stackoverflow.com/a/23742598/2893073

  1. Handler类

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

感谢。