Vaadin: вкладки с обработкой событий таблицы - PullRequest
0 голосов
/ 14 апреля 2011

Мы внедрили представление вкладок в Vaadin, где каждая вкладка имеет экземпляр нашего расширенного класса Table.

В нашей таблице мы добавили ярлык быстрого вызова, который прослушивает нажатие клавиши ENTER.После нажатия Enter таблица становится либо редактируемой, либо недоступной для редактирования.

Наша проблема заключается в следующем: если мы сделаем таблицу (1) редактируемой и перейдем на вкладку, то таблица (1) на старой вкладке все еще удерживает контроль над событием ENTER и, следовательно, мы не можем выполнитьСобытие ENTER-keypress в Таблице (2) и редактирование Таблицы (2).

Есть ли способ привязать какое-либо событие к таблице, которая говорит что-то вроде:

 If Table.focus() is false then
     release event.ENTER 

Или, если есть какой-то другой путь, например Table.OnFocus(), вы можете взять контроль над собой или что-то в этом роде.

Ответы [ 2 ]

1 голос
/ 15 апреля 2011

Мне кажется, проблема в том, что прослушиватель ярлыков подключен к родительскому окну / панели таблицы, а не к самой таблице (способ обработки ярлыков Vaadin).

Поэтому попробуйте обернуть каждую таблицус панелью («легкий» стиль, если вам не нужны дополнительные границы), и посмотрите, поможет ли это.

В противном случае я думаю, что вам нужно добавлять / удалять отдельные обработчики ярлыков таблицы каждый раз, когда вы меняететаб.

0 голосов
/ 18 апреля 2011

Таким образом, я решил это, очистив и добавив обработчики действий, как предложил Джоуни.

Это пример кода:

Из класса, расширяющего Table

public void initTableListeners(){
    extValueChangeListener = new ExtendedValueChangeListener();
    extMouseListener = new ExtendedMouseListener();
    extShortcutListener = new ExtendedShortcutListener("enter", KeyCode.ENTER);

    setTableListeners();
}

/**
 * Registers the default listeners to the table.
 */
public void setTableListeners(){        
    if(!hasListeners(extValueChangeListener.getClass())){           
        addListener(extValueChangeListener);
    }
    if(!hasListeners(extMouseListener.getClass())){         
        addListener(extMouseListener);
    }
    if(!hasListeners(extShortcutListener.getClass())){          
        addShortcutListener(extShortcutListener);
    }
}

/**
 * Clears the listeners registered to the table.
 */
public void clearTableListeners(){
        removeListener(extValueChangeListener);
        removeListener(extMouseListener);
        removeShortcutListener(extShortcutListener);

}

@Override
public EditTable getTable() {       
    return this;
}

А это из вкладки слушателя:

class ExtendedSelectedTabChangeListener implements SelectedTabChangeListener{
        @Override
        public void selectedTabChange(SelectedTabChangeEvent event) {
            // clear old tables listeners
            if(currentTab != null){
                Component table = currentTab.getComponent();
                if(table instanceof EditTableInterface){
                    ((EditTableInterface) table).getTable().clearTableListeners();
                }
            }

            // add new listeners to new table
            currentTab = tabsheet.getTab(tabsheet.getSelectedTab());
            if(currentTab != null){
                Component table = currentTab.getComponent();
                if(table instanceof EditTableInterface){
                    ((EditTableInterface)table).getTable().setTableListeners();
                }
            }
        }

    }
...