package com.constellio.app.ui.handlers; import java.io.Serializable; import com.vaadin.event.FieldEvents; import com.vaadin.event.FieldEvents.BlurNotifier; import com.vaadin.event.FieldEvents.FocusNotifier; import com.vaadin.event.ShortcutAction; import com.vaadin.event.ShortcutListener; import com.vaadin.ui.AbstractComponent; import com.vaadin.ui.ComboBox; import com.vaadin.ui.DateField; import com.vaadin.ui.PasswordField; import com.vaadin.ui.TextField; /** * Source : http://ramontalaverasuarez.blogspot.ca/2014/06/vaadin-7-detect-enter-key-in-textfield.html * Use: https://vaadin.com/forum/#!/thread/77601/1857835 * * @author Vincent */ @SuppressWarnings("serial") public abstract class OnEnterKeyHandler implements Serializable { final ShortcutListener enterShortCut = new ShortcutListener( "EnterOnTextAreaShorcut", ShortcutAction.KeyCode.ENTER, null) { @Override public void handleAction(Object sender, Object target) { onEnterKeyPressed(); } }; public void installOn(TextField component) { doInstallOn(component); } public void installOn(PasswordField component) { doInstallOn(component); } public void installOn(DateField component) { doInstallOn(component); } public void installOn(ComboBox component) { doInstallOn(component); } private void doInstallOn(final AbstractComponent component) { ((FocusNotifier) component).addFocusListener(new FieldEvents.FocusListener() { @Override public void focus(FieldEvents.FocusEvent event) { component.addShortcutListener(enterShortCut); } }); ((BlurNotifier) component).addBlurListener(new FieldEvents.BlurListener() { @Override public void blur(FieldEvents.BlurEvent event) { component.removeShortcutListener(enterShortCut); } }); } public abstract void onEnterKeyPressed(); }