如何解决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();
}
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。