Vaadin:具有表事件处理的选项卡

| 我们在Vaadin中实现了一个选项卡视图,其中每个选项卡都具有扩展Table类的实例。 在我们的表中,我们添加了一个侦听ENTER键的快捷方式侦听器。按下Enter键后,表格将变为可编辑或不可编辑状态。 我们的问题是这样的:如果我们使Table(1)可编辑并切换选项卡,则旧选项卡中的Table(1)仍然控制ENTER事件,因此我们无法在Table中执行新的ENTER-keypress事件( 2)并使Table(2)可编辑。 有什么方法可以将某种事件绑定到表上,例如:
 If Table.focus() is false then
     release event.ENTER 
或者,如果还有其他方法,例如ѭ1,则可以控制。     
已邀请:
我认为问题在于快捷方式侦听器附加到表的父窗口/面板,而不是表本身(处理快捷方式操作的Vaadin方法)。 因此,请尝试使用面板包装每个表格(如果您不希望使用多余的边框,则使用\“ light \”样式),然后查看是否有帮助。 否则,我认为您每次更改选项卡时都需要添加/删除各个表的快捷方式处理程序。     
所以我解决这个问题的方法就是按照Jouni的建议清除并添加动作处理程序。 这是代码示例: 从类扩展表
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();
                }
            }
        }

    }
    

要回复问题请先登录注册