【问题标题】:Vaadin: Tabs with Table event handlingVaadin:带有 Table 事件处理的选项卡
【发布时间】:2011-04-14 09:40:20
【问题描述】:

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

在我们的表格中,我们添加了一个快捷方式侦听器,用于侦听 ENTER 按键。按下回车后,表格变为可编辑或不可编辑。

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

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

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

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

【问题讨论】:

    标签: java events tabs vaadin


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      所以我解决这个问题的方法是按照 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();
                      }
                  }
              }
      
          }
      

      【讨论】:

        猜你喜欢
        • 2020-02-18
        • 2012-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多