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

本文介绍了一种在Java插件中加载非GIF格式图标的方法,通过修改代码使得插件能够支持加载PNG等其他格式的图标文件。
默认情况下,插件只能取得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.   }  
采用PyQt5框架与Python编程语言构建图书信息管理平台 本项目基于Python编程环境,结合PyQt5图形界面开发库,设计实现了一套完整的图书信息管理解决方案。该系统主要面向图书馆、书店等机构的日常运营需求,通过模块化设计实现了图书信息的标准化管理流程。 系统架构采用典型的三层设计模式,包含数据存储层、业务逻辑层和用户界面层。数据持久化方案支持SQLite轻量级数据库与MySQL企业级数据库的双重配置选项,通过统一的数据库操作接口实现数据存取隔离。在数据建模方面,设计了包含图书基本信息、读者档案、借阅记录等核心数据实体,各实体间通过主外键约束建立关联关系。 核心功能模块包含六大子系统: 1. 图书编目管理:支持国际标准书号、中国图书馆分类法等专业元数据的规范化著录,提供批量导入与单条录入两种数据采集方式 2. 库存动态监控:实时追踪在架数量、借出状态、预约队列等流通指标,设置库存预警阈值自动提醒补货 3. 读者服务管理:建立完整的读者信用评价体系,记录借阅历史与违规行为,实施差异化借阅权限管理 4. 流通业务处理:涵盖借书登记、归还处理、续借申请、逾期计算等标准业务流程,支持射频识别技术设备集成 5. 统计报表生成:按日/月/年周期自动生成流通统计、热门图书排行、读者活跃度等多维度分析图表 6. 系统维护配置:提供用户权限分级管理、数据备份恢复、操作日志审计等管理功能 在技术实现层面,界面设计遵循Material Design设计规范,采用QSS样式表实现视觉定制化。通过信号槽机制实现前后端数据双向绑定,运用多线程处理技术保障界面响应流畅度。数据验证机制包含前端格式校验与后端业务规则双重保障,关键操作均设有二次确认流程。 该系统适用于中小型图书管理场景,通过可扩展的插件架构支持功能模块的灵活组合。开发过程中特别注重代码的可维护性,采用面向对象编程范式实现高内聚低耦合的组件设计,为后续功能迭代奠定技术基础。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值