Наборы значков

Наборы значков (icon sets) позволяют отвязать использование значков в визуальных компонентах от конкретных путей к изображениям в теме или констант элементов шрифтов. Кроме того, они упрощают переопределение значков, используемых в UI, унаследованном от дополнений.

Наборы значков – это перечисления, каждый элемент которых соответствует некоторому значку. Класс перечисления должен реализовывать интерфейс Icons.Icon с единственным параметром - строкой, задающей источник получения значка, например, font-icon:CHECK или icons/myawesomeicon.png. Для получения источника значка следует использовать предоставляемый фреймворком бин Icons.

Рассмотрим процесс создания набора значков.

  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. Зарегистрируйте набор значков в свойстве jmix.ui.icons-config файла application.properties:

    jmix.ui.icons-config=ui.ex1.icon.MyIcon
  3. Теперь вы можете использовать значки из созданного набора, декларативно указывая имя соответствующего элемента enum в 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"/>