A button performs an action when a user clicks on it.

  • XML element: button

  • Java class: JmixButton


A button can have a text, an icon, or both:

button 1

An example of defining a button with text, icon and a tooltip (title attribute) retrieved from the message bundle:

<button id="toolsButton"

To handle button clicks, subscribe to the ClickEvent in the view class:

public void onToolsButtonClick(ClickEvent<Button> event) {
    // ...


The themeNames attribute allows you to assign a specific button style from the set of predefined variants.

  • Importance variants:

    button variant 1
    <button text="Primary" themeNames="primary"/>
    <button text="Secondary"/>
    <button text="Tertiary" themeNames="tertiary"/>
  • Danger or error variants:

    button variant 2
    <button text="Primary" themeNames="primary error"/>
    <button text="Secondary" themeNames="error"/>
    <button text="Tertiary" themeNames="tertiary error"/>
  • Success variants:

    button variant 3
    <button text="Primary" themeNames="primary success"/>
    <button text="Secondary" themeNames="success"/>
    <button text="Tertiary" themeNames="tertiary success"/>
  • Contrast variants:

    button variant 4
    <button text="Primary" themeNames="primary contrast"/>
    <button text="Secondary" themeNames="contrast"/>
    <button text="Tertiary" themeNames="tertiary contrast"/>
  • Size variants:

    button variant 5
    <button text="Large" themeNames="large"/>
    <button text="Normal"/>
    <button text="Small" themeNames="small"/>
  • Inline variant without any white space around the button text:

    button variant 6
    <button text="Tertiary inline" themeNames="tertiary-inline"/>

The variant theme names are defined in the ButtonVariant class. See also Vaadin Docs for more information about button styles.


Instead of creating a ClickEvent handler, you can associate the button with an existing Action.

If the action is defined for the view, specify the action id in the button’s action attribute:

    <action id="helloAction" text="Say Hello"/>
    <button id="helloButton" action="helloAction"/>

If the action is defined for a component, such as dataGrid, specify the component id and action id separated by the dot in the button’s action attribute:

<button id="createButton" action="usersTable.create"/>

<dataGrid id="usersTable" dataContainer="users">
        <action id="create" type="list_create"/>



If the disableOnClick attribute is set to true, the button will be automatically disabled when clicked, typically to prevent (accidental) extra clicks on a button. You can later re-enable the button by invoking the setEnabled(true) method.


Allows to set the Icon component for the button. There are two built-in icon sets:

  • Lumo Icons. You can set the Lumo icon in the view class:

    protected JmixButton lumoBtn;
    public void onInit(InitEvent event) {
        Icon lumoIcon = new Icon("lumo", "photo");
  • Vaadin Icons. The icons from this set have constants. You can set the Vaadin icon in the view class:

    protected JmixButton vaadinBtn;
    public void onInit(InitEvent event) {
        Icon vaadinIcon = new Icon(VaadinIcon.PHONE);

    or in the XML descriptor:

    <button id="vaadinBtn" icon="ALARM"/>


If the iconAfterText attribute is set to true, this button’s icon should be positioned after it’s text content.



Defines the component’s white-space style value. Possible values are:



  • PRE







Чтобы сгенерировать заглушку обработчика в Jmix Studio, используйте вкладку Handlers панели инспектора Jmix UI, или команду Generate Handler, доступную на верхней панели контроллера экрана и через меню CodeGenerate (Alt+Insert / Cmd+N).


com.vaadin.flow.component.ClickEvent is sent when the user clicks on the button.

@Subscribe("helloButton") (1)
public void onHelloButtonClick(ClickEvent<Button> event) {
    Button button = event.getSource(); (2)
    // ...
1 The @Subscribe annotation connects the handler method to the component by the component’s id.
2 If needed, you can get the clicked button from the event object.

To register the event handler programmatically, use the addClickListener() component method.


See Also

See Vaadin Docs for more information.