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

发布于 2024-11-01 09:56:41 字数 432 浏览 1 评论 0原文

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

在我们的表中,我们添加了一个监听 ENTER 按键的快捷监听器。一旦按下回车键,表格就变得可编辑或不可编辑。

我们的问题是这样的:如果我们使 Table(1) 可编辑并切换选项卡,则旧选项卡中的 Table(1) 仍然控制 ENTER 事件,因此我们无法在新选项卡中执行新的 ENTER 按键事件表(2)并使表(2)可编辑。

是否有某种方法可以将某种事件绑定到表,该表显示如下内容:

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

或者是否有其他方法,例如Table.OnFocus () 你可以控制什么。

We have implemented a tab view in Vaadin where each tab has a instance of our extended Table class.

In our table we have added a shortcutlistener that listens to ENTER-keypress. Once enter is pressed the table becomes either editable or non-editable.

Our problem is this: If we make Table(1) editable and switch tab then Table (1) in the old tab still holds controll over the ENTER event and hence we can't perform a new ENTER-keypress event in the Table (2) and make Table(2) editable.

Is there some way to bind some kind of of event to a table that says something like:

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

Or if there is some other way, like Table.OnFocus() you could take control or something.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

因为看清所以看轻 2024-11-08 09:56:41

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

因此,尝试用面板包裹每个表格(如果您不需要额外的边框,则为“浅色”样式),然后看看这是否有帮助。

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

I think the problem is that the shortcut listener is attached to the parent window/panel of the table, and not the table itself (the Vaadin way of handling shortcut actions).

So try wrapping each table with a Panel ("light" style if you don't want the extra borders), and see if that helps.

Otherwise I think you need to add/remove the individual table shortcut handlers each time you change the tab.

明月松间行 2024-11-08 09:56:41

所以我解决这个问题的方法是按照 Jouni 的建议清除并添加操作处理程序。

这是代码示例:

来自扩展 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();
                }
            }
        }

    }

So the way I solved this was by clearing and adding action handlers just as Jouni suggested.

This is a sample of the code:

From the class extending 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;
}

And this is from tab listener:

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();
                }
            }
        }

    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文