0

I would like to use a custom icon from a picture file in Vaadin 10.

Up to Vaadin 8 it was possibleto load the icon file via ExternalResource:

public final static Resource MY_ICON    = new ExternalResource("VAADIN/images/my_icon.png");

and then just use the resource as icon:

Button button = new Button("My Button text");
button.setIcon(MY_ICON);

The setIcon method in Vaadin 10 requires a Component as parameter. How can i load my Icon into a Component? Is there some out of the box solution in vaadin 10?

I would prefer a solution with pure java like in vaadin 7/8.

4

2 回答 2

1

我建议将您的图标文件作为/src/main/webapp/my_icon.png(或者/src/main/resources/META-INF/resources/my_icon.png如果打包为.jar)。然后,您可以使用内置com.vaadin.flow.component.html.Image组件在应用程序的任何位置使用它,例如add(new Image("my_icon.png", "My icon"));.

于 2018-11-07T11:41:09.893 回答
1

我还将发布我自己的解决方案,因为它特定于按钮图标样式。您必须先将图标文件加载到 vaadin Image (com.vaadin.flow.component.html.Image) 中。但它还需要一些额外的样式才能在按钮中正确定位图标。

import com.vaadin.flow.component.html.Image;

public enum MyIcons {

    ICON_1("frontend/img/icon_1.png", ""),
    ICON_2("frontend/img/icon_2.png", ""):

    private String url;
    private String alt;

    MyIcons(String url, String alt) {
        this.url = url;
        this.alt = alt;
    }



    public Image create() {
        Image image = new Image(url, alt);
        image.getStyle().set("vertical-align", "middle"); // otherwise the icon will be just on the top left corner in the button
        return image;
    }

    /**
     * marign right distance if using Icon in Button with Text. so there is space between the icon and the button text
     * @param margin_right
     * @return
     */
    public Image create(int margin_right) {
        Image image = create();
        image.getStyle().set("margin-right", margin_right+"px"); //some space between icon and button text
        return image;
    }

}

用法:

Button button = new Button();
button.setIcon(MyIcons.ICON_1.create());

Button buttonWithText = new Button("My button text");
buttonWithText.setIcon(MyIcons.ICON_1.create(), 10); //10px space between icon and button text
于 2018-11-07T17:25:16.980 回答