Наборы значков
Наборы значков (icon sets) позволяют отвязать использование значков в визуальных компонентах от конкретных путей к изображениям в теме или констант элементов шрифтов. Кроме того, они упрощают переопределение значков, используемых в UI, унаследованном от дополнений.
Наборы значков – это перечисления, каждый элемент которых соответствует некоторому значку. Класс перечисления должен реализовывать интерфейс Icons.Icon
с единственным параметром - строкой, задающей источник получения значка, например, font-icon:CHECK
или icons/myawesomeicon.png
. Для получения источника значка следует использовать предоставляемый фреймворком бин Icons
.
Рассмотрим процесс создания набора значков.
-
Создайте перечисление, которое будет содержать значки. Имена элементов перечисления в наборе должны соответствовать регулярному выражению
[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 Добавление нового значка. -
Зарегистрируйте набор значков в свойстве jmix.ui.icons-config файла
application.properties
:jmix.ui.icons-config=ui.ex1.icon.MyIcon
-
Теперь вы можете использовать значки из созданного набора, декларативно указывая имя соответствующего элемента 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"/>