package au.com.vaadinutils.fields; import com.vaadin.event.LayoutEvents.LayoutClickEvent; import com.vaadin.event.LayoutEvents.LayoutClickListener; import com.vaadin.shared.ui.label.ContentMode; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.Button.ClickListener; import com.vaadin.ui.Label; import com.vaadin.ui.VerticalLayout; /** * A Vaadin label that allows actions to be run by adding a LayoutClickListener */ @SuppressWarnings("serial") public class ClickableLabel extends VerticalLayout { private Label label; public ClickableLabel() { this(null); setImmediate(true); } public ClickableLabel(String value) { this(value, ContentMode.HTML); } public ClickableLabel(String value, ContentMode contentMode) { label = new Label(value, contentMode); addComponent(label); setImmediate(true); } public void setValue(String value) { label.setValue(value); } @Override public void setStyleName(String style) { label.setStyleName(style); } @Override public void addStyleName(String style) { label.addStyleName(style); } public void setContentMode(ContentMode contentMode) { label.setContentMode(contentMode); } public String getValue() { return label.getValue() != null ? label.getValue() : ""; } /** * makes the ClickableLabel a drop in replace ment for a button * * @param clickListener */ public void addClickListener(final ClickListener clickListener) { addLayoutClickListener(new LayoutClickListener() { @Override public void layoutClick(LayoutClickEvent event) { clickListener.buttonClick(new ClickEvent(event.getComponent())); } }); } public Label getLabel() { return label; } }