在Vaadin表格中选择所有快捷键(Ctrl-A)?

在Vaadin表格中选择所有快捷键(Ctrl-A)?,vaadin,shortcut,vaadin7,Vaadin,Shortcut,Vaadin7,我的UI Builder代码中有以下代码段: table.addShortcutListener(new ShortcutListener("Select all", null, KeyCode.A, ModifierKey.CTRL) { @Override public void handleAction(Object sender, Object target) { AbstractSelect t = (AbstractSelect) target; if (t

我的UI Builder代码中有以下代码段:

table.addShortcutListener(new ShortcutListener("Select all", null, KeyCode.A, ModifierKey.CTRL) {

  @Override
  public void handleAction(Object sender, Object target) {
    AbstractSelect t = (AbstractSelect) target;
    if (t.isMultiSelect()) {
      t.setValue(t.getItemIds());
    }
  }
});
return table;
这允许按Ctrl+A选择表中的所有项目。这通常在我第一次加载视图时起作用,直到我使其中一个表不可见(
setVisible(false)
)。使表再次可见后,它不再工作(甚至在重新加载页面时也不工作),每当我按Ctrl+A时,我都会得到以下控制台输出:


我的代码有什么问题?如何实现我的目标?

我建议进行此修改,对我来说效果很好(我想comp是Vaadin表)

问题可能是,在本地测试时,某些组件的序列化失败,因此对comp的静态引用(您需要将其设置为final)和defaut UID应该可以解决这个问题。 测试了多次,但从未发生错误。 干杯

编辑

我知道问题发生在使桌子不可见然后使其可见时。 我刚才想到,您可以在一个不可见的表上尝试CTRL+A:如果是这种情况,那么它是正确的,当一个组件被设置为不可见时,每个侦听器都将处于“待机”状态,直到您再次将其设置为可见。所以对我来说:

  • setVisible(假)
  • setVisible(真)
  • “CTRL+A”
工作,而

  • setVisible(假)
  • “CTRL+A”
给我

nov 03, 2014 2:19:34 PM com.vaadin.event.ConnectorActionManager handleAction
WARNING: Ignoring action for disabled connector com.vaadin.ui.Table
就是这样,代码中没有错误,您必须更改功能,并且在不可见的表上没有“CTRL+a”(这对imho来说似乎是一件坏事)。另一方面,您可以覆盖setVisible方法,但我不鼓励这样做。
干杯。

似乎
执行
操作.通知程序
界面有一些问题。在这种情况下,Vaadin开发人员建议不要将
ShortcutListener
添加到表本身,而是添加到表所包含的面板中

我的新实施:

private void addCtrlAHandler(final AbstractSelect table) {
    Panel panelEnclosingTable = table.findAncestor(Panel.class);
    Preconditions.checkArgument(panelEnclosingTable != null, "Table is not enclosed in a panel; cannot add shortcut handlers");

    panelEnclosingTable.addShortcutListener(new ShortcutListener("Select all", null, KeyCode.A, ModifierKey.CTRL) {

        @Override
        public void handleAction(Object sender, Object target) {
            if (table.isMultiSelect()) {
                table.setValue(table.getItemIds());
            }
        }
    });
}

通过此解决方案,我获得了预期的行为。

感谢您的回复。不幸的是,这似乎不是解决办法。。。我观察到完全相同的行为。你能详细地告诉我你做了什么来产生这样的错误吗?谢谢是的,根据我的编辑。所以你的代码没有错,这就是你应该做的,你能不能绕过这个?对不起,我的顺序错了。我的意思是:工作:
CTRL-A
。不工作:
setVisible(false);setVisible(真);CTRL-A
。据我所知,情况不应该是这样的……那么你是说在桌子再次可见后,它就不工作了?真奇怪。。。你能给你的代码添加更多的上下文,看看是否还有其他东西会干扰你的代码吗?
nov 03, 2014 2:19:34 PM com.vaadin.event.ConnectorActionManager handleAction
WARNING: Ignoring action for disabled connector com.vaadin.ui.Table
private void addCtrlAHandler(final AbstractSelect table) {
    Panel panelEnclosingTable = table.findAncestor(Panel.class);
    Preconditions.checkArgument(panelEnclosingTable != null, "Table is not enclosed in a panel; cannot add shortcut handlers");

    panelEnclosingTable.addShortcutListener(new ShortcutListener("Select all", null, KeyCode.A, ModifierKey.CTRL) {

        @Override
        public void handleAction(Object sender, Object target) {
            if (table.isMultiSelect()) {
                table.setValue(table.getItemIds());
            }
        }
    });
}