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

时间:2011-04-14 09:40:20

标签: java events tabs vaadin

我们在Vaadin中实现了一个标签视图,其中每个标签都有我们扩展的Table类的实例。

在我们的表中,我们添加了一个侦听ENTER-keypress的shortcutlistener。按下输入后,表格将变为可编辑或不可编辑。

我们的问题是:如果我们使表(1)可编辑并切换选项卡,那么旧选项卡中的表(1)仍然保持对ENTER事件的控制,因此我们无法执行新的ENTER-keypress表(2)中的事件,并使表(2)可编辑。

是否有某种方法可以将某种事件绑定到表格中,例如:

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

或者,如果还有其他方式,例如Table.OnFocus(),您可以控制或控制某事。

2 个答案:

答案 0 :(得分:1)

我认为问题在于快捷方式侦听器附加到表的父窗口/面板,而不是表本身(Vaadin处理快捷方式操作的方式)。

因此,尝试使用Panel包装每个表(如果您不想要额外的边框,请使用“浅色”样式),看看是否有帮助。

否则我认为每次更改选项卡时都需要添加/删除单个表格快捷方式处理程序。

答案 1 :(得分:0)

所以我解决这个问题的方法是通过清除和添加动作处理程序,就像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();
                }
            }
        }

    }