Vaadin:使用图像作为按钮

Vaadin: Using an image as a button

我想使用图像作为按钮。我让它工作了,但是制作得不是很好,请看一下屏幕截图。如您所见,按钮本身比图像大很多,但我希望它与图像一样大:

实际的按钮比图像大。这里的目标是除了要单击的图像之外别无其他。我怎样才能做到这一点?这是屏幕截图中按钮的代码:

 Button testButton = new Button();
 String basepath = VaadinService.getCurrent().getBaseDirectory().getAbsolutePath();
 testButton.setIcon(new FileResource(new File(basepath + "/VAADIN/themes/mytheme/img/Button.png")));
 loginForm.addComponent(testButton);

我知道

testButton.setStyleName(BaseTheme.BUTTON_LINK)

使按钮不可见,但不幸的是,这不会调整按钮的大小,只是调整可见性..

对我有用:

  Button button = new Button();
  button.setStyleName(ValoTheme.BUTTON_LINK);
  button.setIcon(new ClassResource("/images/button-img.jpg"));
  button.addClickListener(e -> System.out.println("click"));

也许您还定义了其他 css?

也许您的按钮包含在具有固定高度的布局中?

还要确保您的按钮未配置 width/height,以便它可以自动调整其大小以适应图标图像的大小。

您可能 运行 遇到的下一个问题是焦点边框:

另一种方法是使用布局点击侦听器,并通过 CSS 添加您自己的 mouse-over/hover/focus 样式。

VerticalLayout layout = new VerticalLayout(new Image(null, new ClassResource("/images/test.png")));
layout.addLayoutClickListener(e -> System.out.println("click"));

您可以简单地向图像添加点击侦听器,而不是使用按钮。

Image image = new Image(null, new ClassResource("/images/button-img.jpg");
image.addClickListener(e -> System.out.println("click"));
image.addStyleName("my-img-button");

并添加这个css,我使用@Stylesheet注解添加在CSS.

.my-img-button {
cursor: pointer;
}

使用 Vaadin 14:

Image img = new Image("src");
Button testButton = new Button(img);

非常简单。