'Both ENTER shortcut and TextArea in Vaadin

TextField f = new TextField();
Button b = new Button("Save");
b.setClickShortcut(KeyCode.ENTER); // For quick saving from text field itself

TextArea longText = new TextArea(); // "Enter" is garbled here

Hot to make the shortcut to work only in the from text field?



Solution 1:[1]

Use focus and blur listeners to remove and add the shortcut key:

    f.addFocusListener(new FocusListener() {
        @Override
        public void focus(FocusEvent event) {
            b.setClickShortcut(KeyCode.ENTER);
        }
    });
    f.addBlurListener(new BlurListener() {
        @Override
        public void blur(BlurEvent event) {
            b.removeClickShortcut();
        }
    });

Solution 2:[2]

Newer versions of Vaadin require the following code as addListener() is deprecated now.

    f.addFocusListener(new FocusListener() {

        private static final long serialVersionUID = -6733373447805994139L;

        @Override
        public void focus(FocusEvent event) {
            b.setClickShortcut(KeyCode.ENTER);
        }
    });

    f.addBlurListener(new BlurListener() {

        private static final long serialVersionUID = -3673311830300629513L;

        @Override
        public void blur(BlurEvent event) {
            b.removeClickShortcut();
        }
    });

Solution 3:[3]

Talking in terms of Vaadin 14, I was looking for the answer and for me, this worked well

  Button search = new Button("Search");
  search.addClickShortcut(Key.ENTER);

Solution 4:[4]

As of Vaadin 23 (and probably for sometime before) the requirements have changed again.


private ShortcutRegistration primaryShortCut;

void customShortCutHandling()
    {
        myTextAreaField.addFocusListener((e) ->
            {
                System.out.println("disable");
                primaryShortCut = primaryButton.addClickShortcut(Key.ENTER);
            });

        myTextAreaField.addBlurListener((e) ->
            {
                System.out.println("enable");
                primaryShortCut.remove();
            });
    }
}

This code assumes that primaryShortCut was set when the form is created.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 blubb
Solution 2
Solution 3 Vipul Jain
Solution 4 Brett Sutton