Оба ярлыка ENTER и TextArea в 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

Горячий сделать ярлык для работы только в текстовом поле от?

4 ответа

Решение

Используйте слушателей фокуса и размытия, чтобы удалить и добавить клавишу быстрого доступа:

    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();
        }
    });

Более новые версии Vaadin требуют следующий код, так как addListener() устарела.

    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();
        }
    });

Говоря о Vaadin 14, я искал ответ, и для меня это сработало

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

Начиная с Vaadin 23 (и, возможно, раньше) требования снова изменились.

      
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();
            });
    }
}

В этом коде предполагается, что при создании формы был задан параметр primaryShortCut.

Другие вопросы по тегам