图标集

图标集支持将可视化组件中使用的图片图标进行解耦,从使用实际的图片路径改为使用主题内的图片或者字体元素常量。同时也简化了对继承自 扩展组件 中 UI 的图标进行覆盖的工作。

图标集是图标对应的枚举值。一个图标集必须实现 Icons.Icon 接口,并带有一个字符串类型的参数,用来表示图标源。例如,font-icon:CHECKicons/myawesomeicon.png。可以使用框架提供的 Icons bean 获取图标源。

下面是创建图标集的过程。

  1. 创建一个包含图标的枚举。集合中的所有图标名称必须符合正则表达式 [A-Z]_,也就是说只能包含大写字母和下划线。

    public enum MyIcon implements Icons.Icon {
    
        EYE("classpath:/icon/eye.png"), (1)
        PENGUIN("classpath:/icon/penguin.png"); (2)
    
        private String source;
    
        MyIcon(String source) {
            this.source = source;
        }
    
        @Override
        public String source() {
            return source;
        }
    
        @Override
        public String iconName() {
            return name();
        }
    }
    1 覆盖 Jmix 默认图标
    2 添加新图标
  2. application.properties 文件的 jmix.ui.icons-config 属性中注册图标集:

    jmix.ui.icons-config=ui.ex1.icon.MyIcon
  3. 然后可以在界面 XML 中使用声明式通过图标名称进行使用:

    <button icon="PENGUIN"/>

    或者在界面控制器编程式使用:

    iconButton.setIconFromSet(MyIcon.PENGUIN);

下面这些前缀支持通过声明的方式使用不同来源的图标:

  • theme - 图标保存在当前的主题目录中,例如,themes/helium-extended/icons/check-mark.png

    <button icon="theme:icons/check-mark.png"/>
  • file - 图标来自文件系统:

    <button icon="file:D:/JMIX/penguin.png"/>
  • classpath - 图标从 classpath 获取:

    <button icon="classpath:/icon/eye.png"/>