Я столкнулся с проблемой ClickShortcut с Vaadin 8. Взгляните на мой простой пример кода:

private Component shortcutTest()
{
    TabSheet tabSheet = new TabSheet();
    tabSheet.addTab( createButton( "button1", 
                                  ShortcutAction.KeyCode.ENTER, 
                                  ShortcutAction.ModifierKey.CTRL ),
                                  "Tab1" );
    tabSheet.addTab( createButton( "button2", 
                                  ShortcutAction.KeyCode.ENTER, 
                                  ShortcutAction.ModifierKey.CTRL ), 
                                  "Tab2" );
    return tabSheet;
}

private Component createButton(String name, int keyCode, int modifier)
{
    Button button = new Button( name );
    button.setClickShortcut( keyCode, modifier );
    button.addClickListener( event -> System.out.println( event.getButton().getCaption() + " - click!" ) );
    return button;
}

Когда выбрана вкладка Tab1 , я получаю ожидаемый результат от действия Ctrl + Enter , но когда я выбираю Tab2 - ничего не происходит.

Как я могу с этим справиться? Я хотел бы иметь один и тот же ярлык для разных кнопок на разных вкладках, но похоже, что у меня может быть только одна кнопка для одной комбинации ярлыков.

1
Dawid Fieluba 24 Ноя 2017 в 17:30

1 ответ

Лучший ответ

Да, если заглянуть в код фреймворка, похоже, что один и тот же ярлык можно использовать только один раз для каждого окна (или всего пользовательского интерфейса, если у вас нет окон).

Одним из обходных путей может быть динамическая установка и очистка ярлыков при изменении выбранной вкладки, что-то вроде

tabSheet.addSelectedTabChangeListener(
        (TabSheet.SelectedTabChangeListener) event -> {
            if (tabsheet.getSelectedTab().equals(tab1)) {
                button2.removeClickShortcut();
                button1.setClickShortcut(keyCode, modifier);
            } else {
                button1.removeClickShortcut();
                button2.setClickShortcut(keyCode, modifier);
            }
        });
3
Péter Török 24 Ноя 2017 в 15:25