【问题标题】:Fire event when switching stacks of StackLayoutPanel in GWT 2.0在 GWT 2.0 中切换 StackLayoutPanel 堆栈时触发事件
【发布时间】:2010-11-15 23:48:37
【问题描述】:

当我在 GWT 2.0 中切换 StackLayoutPanel 的堆栈时,我试图捕捉一个事件。
最大的问题是我不知道哪个事件被触发并且似乎没有文档,我添加了一个带有 addDomHandler() 的 ChangeHandler 但这没有用。
不幸的是,StackLayoutPanel 没有实现 getSelectedIndex() 函数,所以我不能只使用 ClickEvent 然后检查所选索引是否已更改。

是我使用 StackPanel 的唯一解决方案,还是有办法让它与 StackLayoutPanel 一起使用?

【问题讨论】:

    标签: events gwt event-handling


    【解决方案1】:

    我相信 GWT 2.0.3 StackLayoutPanel 有方法 addSelectionHandler。触发的事件是 SelectionEvent 并且 event.getSelectedItem() 返回相应的堆栈头 id。

    【讨论】:

    • 更清楚地说,id 是一个整数,其中 0 是添加到 StackLayoutPanel 的第一个项目,1 是下一个项目,等等。现在也输入了 SelectionEvent (SelectionEvent)。这在 GWT 2.5.1 中对我很有用。
    【解决方案2】:

    经过一些实验,我做了什么:使用 Label 作为 100% 宽度的标题小部件,然后添加附加的 ClickEvent 处理程序。每次 ClickEvent 到达时,就意味着用户单击了标题,因此面板将可见... 不是很好,但它奏效了。 我尝试使用 ClickWrapper 包装标题小部件(查看 StackLayoutPanel 源代码),但没有成功,我不知道具体原因...

    【讨论】:

    【解决方案3】:

    我是这样做的

    公共类 StackComponent 扩展 StackLayoutPanel 实现 HasChangeHandlers {

    public StackComponent(Unit unit) {
        super(unit);
    }
    
    @Override
    public void showWidget(Widget widget) {
        super.showWidget(widget);
        fireEvent(new StackChangeEvent(widget));
    
    }
    
    @Override
    public HandlerRegistration addChangeHandler(ChangeHandler handler) {
        return addDomHandler(handler, ChangeEvent.getType());
    }
    

    }

    【讨论】:

      【解决方案4】:

      这对我有用:

      private int selectedIndex = 0;
      
      public Main() {
          initWidget(ourUiBinder.createAndBindUi(this));
      
          navigatorStackPanel.add(yourWidgetOne, "Title one");
      
          navigatorStackPanel.add(yourWidgetTwo, "Title two");
      
          navigatorStackPanel.addHandler(new ClickHandler() {
              @Override
              public void onClick(ClickEvent event) {
                  if (navigatorStackPanel.getSelectedIndex() != selectedIndex) {
                      selectedIndex = navigatorStackPanel.getSelectedIndex();
                      if (selectedIndex == 0)
                          do something one;
                      else
                          do something two;
                      GWT.log(" Changed");
                  }
              }
          }, ClickEvent.getType());
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多