Оба ярлыка 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.