Button
Кнопка (Button
) выполняет действия при нажатии пользователем.
XML-имя компонента: button
Основы
У кнопки может быть текст, значок или и то и другое.
Пример кнопки с названием, взятым из пакета локализованных сообщений, и с всплывающей подсказкой:
<button id="helloButton"
caption="msg://button.caption"
description="msg://button.description"/>
Название кнопки задается с помощью атрибута caption, всплывающая подсказка − с помощью атрибута description.
Для обработки нажатия на кнопку создайте слушатель события ClickEvent
в контроллере экрана:
@Subscribe("helloButton")
private void onHelloButtonClick(Button.ClickEvent event) {
// ...
}
Если атрибут disableOnClick
имеет значение true
, кнопка будет автоматически отключена после нажатия по ней. Обычно это делается для того, чтобы предотвратить случайные повторные нажатия. Впоследствии, можно снова включить кнопку вызовом метода setEnabled(true)
.
Атрибут icon указывает на местоположение значка в каталоге темы или имя элемента в используемом наборе значков. Подробную информацию о том, где следует располагать файлы значков, можно прочитать в разделе Значки.
Пример создания кнопки со значком:
<button id="saveButton"
caption="Save"
icon="SAVE"/>
Action
Другой способ обработки нажатий на кнопку – связать ее с интерфейсом Action:
<actions>
<action id="someAction"
caption="Click Me!"/>
</actions>
<layout>
<vbox spacing="true">
<button action="someAction"/>
</layout>
Кнопке можно назначить любое действие, определенное в окне или табличном компоненте (они реализуют интерфейс Component.ActionsHolder
). В случае действия, определенном в окне, укажите id действия в атрибуте кнопки action
, как в примере выше. В случае действия, определенном в компоненте, укажите id компонента и id действия, разделенные точкой. В следующем примере кнопка связана с действием create
компонента usersTable
:
<table id="usersTable"
width="100%"
dataContainer="usersDc">
<actions>
<action id="create"
type="create"/>
</actions>
<buttonsPanel>
<button id="usersTableCreateBtn"
action="usersTable.create"/>
</buttonsPanel>
</table>
Действие для кнопки можно также создавать программно, в контроллере экрана, используя наследование от класса BaseAction.
Shortcut
С помощью атрибута shortcut
можно задать комбинацию клавиш для кнопки. Возможные модификаторы: ALT
, CTRL
, SHIFT
– отделяются символом "-". Например:
<button id="saveButton2"
description="Save"
icon="SAVE"
shortcut="ALT-S"/>
Предопределенные стили
Атрибут primary
позволяет задать подсветку отдельных кнопок. Подсветка автоматически применится к кнопке, если у действия, вызываемого этой кнопкой, атрибут primary имеет значение true
.
<button id="primaryBtn"
caption="Primary button"
primary="true"/>
В темах hover
и helium
подсветка доступна по умолчанию; для ее активации в теме, основанной на halo
, установите значение true
для переменной стиля $jmix-highlight-primary-action
.
Предопределенные стили компонента Button
задаются в XML-дескрипторе или контроллере экрана с помощью атрибута stylename
:
<button id="styledBtn1"
caption="Borderless"
stylename="borderless"/>
Чтобы применить стиль программно, выберите одну из констант класса ThemeClassNames
с префиксом BUTTON_
:
styledBtn1.setStyleName(ThemeClassNames.BUTTON_BORDERLESS);
Предопределенные стили:
Внешний вид компонента Button
можно настроить с помощью переменных SCSS с префиксом $jmix-button-*
. Эти переменные можно изменить в визуальном редакторе после создания новой темы.
Метод Click
Метод click()
интерфейса Button
симулирует нажатие кнопки, уведомляя всех слушателей на стороне сервера. simulates a button click, notifying all server-side listeners.
Если кнопка отключена, никаких действий не предпринимается.
События и слушатели
Чтобы сгенерировать заглушку слушателя в Jmix Studio, выберите компонент в XML-дескрипторе экрана или на панели иерархии Jmix UI и используйте вкладку Handlers на панели инспектора Jmix UI. В качестве альтернативы вы можете воспользоваться кнопкой Generate Handler на верхней панели контроллера экрана. |
ClickEvent
ClickEvent
отправляется при нажатии пользователем на кнопку.
@Subscribe("helloButton") (1)
private void onHelloButton1Click(Button.ClickEvent event) {
Button button = event.getSource(); (2)
// ...
}
1 | Аннотация @Subscribe содержит id кнопки. |
2 | При необходимости нажатую кнопку можно получить из объекта события. |
Чтобы создать слушателя этого события программно, используйте метод компонента addClickListener()
.
Все XML-атрибуты
Просматривать и редактировать атрибуты, применимые к компоненту, можно с помощью панели инспектора Jmix UI в конструкторе экранов Studio. |
action - align - caption - captionAsHtml - colspan - css - description - descriptionAsHtml - disableOnClick - enable - box.expandRatio - height - htmlSanitizerEnabled - icon - id - primary - responsive - rowspan - shortcut - stylename - tabIndex - visible - width