【问题标题】:GWT Stackpanel handler for open event用于打开事件的 GWT Stackpanel 处理程序
【发布时间】:2011-10-07 18:31:01
【问题描述】:

当我在 Stackpanel 上的小部件之间切换时,有什么方法可以获取事件? 类似于stackpanel的openhandler。我必须知道的索引 Stackpanel 上的一个打开的小部件。

【问题讨论】:

  • 你的问题对我来说不是很清楚......你能举个例子吗?
  • 好吧,我有一个 Stackpanel,上面有一些小部件。一个小部件已打开。现在我想要一个处理程序,当用户打开另一个小部件时会注意到我。这样我就始终知道 Stackpanel 的哪个子级是打开的。知道我的意思吗?

标签: events gwt handler stackpanel


【解决方案1】:

使用 StackLayoutPanel:http://google-web-toolkit.googlecode.com/svn/javadoc/2.0/com/google/gwt/user/client/ui/StackLayoutPanel.html

使用addSelectionHandler() 方法。要获取选定的小部件,您可以使用getVisibleIndex()getVisibleWidget()

myStackPanel.addSelectionHandler(new SelectionHandler<Integer>() {
    @Override
    public void onSelection(SelectionEvent<Integer> event) {

        int selectedWidgetIndex = stackPanel.getVisibleIndex());

        //Do stuff with the selectedWidgetIndex
    }
});

编辑:这是使用 StackLayoutPanel,OP 使用 StackPanel。它们之间的区别在于 StackPanel 用于 quirks 模式,而 StackLayout Panel 用于标准模式。我会使用 StackLayoutPanel 或任何与布局相关的小部件,因为新的 GWT 小部件会使用它们,比如新的 DataGrid。

【讨论】:

  • 谢谢,但是: - StackPanel 类型的方法 addSelectionHandler(new SelectionHandler(){}) 未定义 - StackPanel 类型的方法 getVisibleIndex() 未定义我认为是 StackPanel没有这样的方法吗?!
  • 你说得对,我正在检查 StackLayoutPanel。如果没有任何兼容性问题,您可以更换 StackPanel。
  • 您使用的是哪个 GWT 版本?在 GWT 2.4 StackPanel 中有getSelectedIndex()
  • 我使用 2.4,但这对我没有帮助。因为如果某事已经发生,该方法会通知我。我需要的是一个处理程序,当堆栈面板发生更改时会注意到我。那我试试 StacklayoutPanel..
【解决方案2】:

您可以在 DecoratedStackPanel(也可能是 StackPanel)上添加点击处理程序并使用 getSelectedIndex(),如下所示:

myDecoratedStackPanel.addHandler(new ClickHandler()
{
    @Override
    public void onClick(ClickEvent clickEvent)
    {
        Window.alert("" + myDecoratedStackPanel.getSelectedIndex());
    }
}, ClickEvent.getType());

【讨论】:

    【解决方案3】:

    通过覆盖showStack 方法,这很容易。尝试类似:

    public class StackPanelX extends StackPanel implements IHasChangeHandler {
    
        String ctx_id=null;
        IChangeHandler chandler=null;
    
        public StackPanelX() {
            super();
        }
    
        public void showStack(int index) {
            int currentStack = this.getSelectedIndex(); 
    
            super.showStack(index);
    
            if (currentStack!=index)
                if (chandler!=null) 
                    chandler.onChange(ctx_id, new Variant(index));
    
        }
    
        @Override
        public void setChangeHandler(String ctx_id, IChangeHandler handler) {
            this.ctx_id=ctx_id;
            this.chandler=handler;
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-11
      • 1970-01-01
      相关资源
      最近更新 更多