微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

gwt处理cellTree的单元中的事件

如何解决gwt处理cellTree的单元中的事件

| 我想在cellTree的单元格中处理双击事件,但我无法使其工作。 任何想法? 谢谢。
if(((Node) value).getNodeType().equals(NodeTypes.Folder))
{
    ListDataProvider<Node> dataProvider = new ListDataProvider<Node>(((Node) value).getChildNode());
    Cell<Node> cell = new AbstractCell<Node>(\"dblclick\") 
    {
          @Override
          public void render(Context context,Node value,SafeHtmlBuilder sb) 
          {
            if (value != null) { sb.appendEscaped(value.getNodeName());    }
          }
          @Override
          public void onbrowserEvent(Context context,Element parent,NativeEvent event,ValueUpdater<Node> valueUpdater) 
            {
                  if (value == null) {   return;          }                         
                  super.onbrowserEvent(context,parent,value,event,valueUpdater);
                  if (\"dblclick\".equals(event))
                    {
                      ControllerPqm.getInstance().advise(ControllerPqm.ADVISE_ERROR,\"Chick\");
                    }
            }

    };
    return new DefaultNodeInfo<Node>(dataProvider,cell);
}
    

解决方法

您必须扩展其他一些Widget,并将DoubleClick事件沉入构造函数中:
sinkEvents(Event.ONCLICK | Event.ONDBLCLICK); 
然后继续编写代码来处理沉没的事件。请注意,双击在某些浏览器的Linux版本中存在问题-在Linux版本以及某些较旧的mac / win版本中,它往往会多次触发单击事件。
public void onBrowserEvent(Event event) 
{ 
    switch (DOM.eventGetType(event)) 
    { 
    case Event.ONCLICK: 
        // your handler code here
      break; 

    case Event.ONDBLCLICK:   
        // your handler code here     
      break;
    }
} 
在您的情况下,理想情况下,此代码应放在顶级NodeTree类本身(或扩展Widget的东西)中,双击将找到被双击的节点并根据其进行操作。     ,您必须比较事件的type属性:
\"dblclick\".equals(event.getType())
    ,尝试这个 :
public class MyMenuItem {
  private String name;
  public MyMenuItem(String name) {
    super();
    this.name = name;
    list = new ArrayList<MyMenuItem>();
  }
  //...
  public boolean hasChildrens() {
    return list.size()>0;
  }
}

public class MyTreeModel implements TreeViewModel {
  ArrayList<MyMenuItem> all;
  public MyTreeModel() {
    all = new ArrayList<MyMenuItem>();
    //Default items
    all.add(... //fill

  }
  @Override
  public <T> NodeInfo<?> getNodeInfo(T value) {
    ListDataProvider<MyMenuItem> dataProvider;
    if (value == null) { // root 
        dataProvider = new ListDataProvider<MyMenuItem>(all);
    } else {
        dataProvider = new ListDataProvider<MyMenuItem>(((MyMenuItem) value).getList());
    }
    Cell<MyMenuItem> cell = new MyCell(); //my Cell with dblclick event
    return new DefaultNodeInfo<MyMenuItem>(dataProvider,cell);
  }
  @Override
  public boolean isLeaf(Object value) {
    if (value instanceof MyMenuItem) {
        MyMenuItem t = (MyMenuItem) value;
        if (!t.hasChildrens())
            return true;
        return false;
    }
    return false; 
  }
}
同样是细胞类:
   private static class MyCell extends AbstractCell<MyMenuItem> {
      public MyCell() {
        super(\"keydown\",\"dblclick\"); //click?
      }

      @Override
      public void onBrowserEvent(Context context,Element parent,MyMenuItem value,NativeEvent event,ValueUpdater<MyMenuItem> valueUpdater) {
        // Check that the value is not null.
        if (value == null) {
          return;
        }
        super.onBrowserEvent(context,parent,value,event,valueUpdater);
        if (\"dblclick\".equals(event.getType())) {
            this.onEnterKeyDown(context,valueUpdater);
        }
      }
      @Override
      public void render(Context context,SafeHtmlBuilder sb) {
          if (value == null) {
            return;
          }
          sb.appendEscaped(value.getName());
      }

      @Override
      protected void onEnterKeyDown(Context context,ValueUpdater<MyMenuItem> valueUpdater) {
            Window.alert(\"You clicked \"+event.getType()+\" \" + value.getName());
      }
    }
`
在模块中:
 treeModel = new MyTreeModel();
 CellTree tree = new CellTree(treeModel,null);
 tree.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.ENABLED);
 TreeNode rootNode = tree.getRootTreeNode();
 TreeNode firstPlaylist = rootNode.setChildOpen(0,true);
 //...
 verticalPanelWest.add(tree);
    ,如果要消耗单元中的浏览器事件,则需要告知要消耗的事件是什么。 显示例子
public class OrderCell extends AbstractCell<Order>  {

    public  OrderCell() {
        super(\"mousedown\",\"mouseover\",\"mouseup\",\"mousemove\");
    }

    @Override
            public void onBrowserEvent(com.google.gwt.cell.client.Cell.Context context,Order value,ValueUpdater<Order> valueUpdater) {
                System.out.print(\"event fired\");

            }
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。