关于插件中图标对象的获取

默认情况下,插件只能取得gif格式的图片,有时候我们需要获取其他格式的图片,这里就需要自己来写了,最近从另外一个插件aptana下发现它在获取非gif格式图片的一些做法,值得参考
在需要使用图标的地方,需要这样写:
java 代码
  1. private static Image fIconFirefox = JSPlugin.getImage("icons/firefox_icon.png");  

JSPlugin中取得照片的相关代码要这样写:

java 代码
  1. /**  
  2.  * Returns an image descriptor for the image file at the given  
  3.  * plug-in relative path.  
  4.  *  
  5.  * @param path the path  
  6.  * @return the image descriptor  
  7.  */  
  8. public static ImageDescriptor getImageDescriptor(String path) {   
  9.     return AbstractUIPlugin.imageDescriptorFromPlugin("com.bstek.ide.js.editor", path); //$NON-NLS-1$   
  10. }   
  11.   
  12. private static Hashtable images = new Hashtable();   
  13.   
  14. /**  
  15.  * getImage  
  16.  *   
  17.  * @param path  
  18.  * @return Image  
  19.  */  
  20. public static Image getImage(String path)   
  21. {   
  22.     if (images.get(path) == null)   
  23.     {   
  24.         ImageDescriptor id = getImageDescriptor(path);   
  25.         if (id == null)   
  26.         {   
  27.             return null;   
  28.         }   
  29.   
  30.         Image i = id.createImage();   
  31.         images.put(path, i);   
  32.         return i;   
  33.     }   
  34.     else  
  35.     {   
  36.         return (Image) images.get(path);   
  37.     }   
  38. }  

 

最终读取图标对象在AbstractUIPlugin.imageDescriptorFromPlugin()方法中实现

java 代码
  1.   /**  
  2.    * Creates and returns a new image descriptor for an image file located  
  3.    * within the specified plug-in.  
  4.    * <p>  
  5.    * This is a convenience method that simply locates the image file in  
  6.    * within the plug-in (no image registries are involved). The path is  
  7.    * relative to the root of the plug-in, and takes into account files  
  8.    * coming from plug-in fragments. The path may include $arg$ elements.  
  9.    * However, the path must not have a leading "." or path separator.  
  10.    * Clients should use a path like "icons/mysample.gif" rather than   
  11.    * "./icons/mysample.gif" or "/icons/mysample.gif".  
  12.    * </p>  
  13.    *   
  14.    * @param pluginId the id of the plug-in containing the image file;   
  15.    * <code>null</code> is returned if the plug-in does not exist  
  16.    * @param imageFilePath the relative path of the image file, relative to the  
  17.    * root of the plug-in; the path must be legal  
  18.    * @return an image descriptor, or <code>null</code> if no image  
  19.    * could be found  
  20.    * @since 3.0  
  21.    */  
  22.   public static ImageDescriptor imageDescriptorFromPlugin(String pluginId,   
  23.           String imageFilePath) {   
  24.       if (pluginId == null || imageFilePath == null) {   
  25.           throw new IllegalArgumentException();   
  26.       }   
  27.   
  28.       // if the bundle is not ready then there is no image   
  29.       Bundle bundle = Platform.getBundle(pluginId);   
  30.       if (!BundleUtility.isReady(bundle)) {   
  31.     return null;   
  32. }   
  33.   
  34.       // look for the image (this will check both the plugin and fragment folders   
  35.       URL fullPathString = BundleUtility.find(bundle, imageFilePath);   
  36.       if (fullPathString == null) {   
  37.           try {   
  38.               fullPathString = new URL(imageFilePath);   
  39.           } catch (MalformedURLException e) {   
  40.               return null;   
  41.           }   
  42.       }   
  43.   
  44.       if (fullPathString == null) {   
  45.     return null;   
  46. }   
  47.       return ImageDescriptor.createFromURL(fullPathString);   
  48.   }  

你可能感兴趣的:(ide,aptana,firefox)