GWT:处理点击GWT FlowPanel的方法是什么

sha*_*sir 13 javascript gwt dom-events

可能是一个愚蠢的问题,但GWT FlowPanel(原始div元素)不提供处理鼠标点击/鼠标移动的东西.覆盖onBrowserEvent也不起作用.

如果onclick使用本机JavaScript 设置事件(需要在之前指定正高度,'div'具有0未指定的高度),则捕获这些事件正常工作.有没有办法不使用JSNI?

Zwi*_*wik 20

你需要做的是将FlowPanel包装在FocusPanel中.FocusPanel包含所有可能的处理程序,因此可以让您设置ClickHandler.

另一种方法是创建自己的小部件,扩展流动面板并实现必要的界面,以便能够包含ClickHandler.

我个人会推荐第一种方法.它更简单,代码更快,不会减慢您的应用程序速度.


小智 8

实际上,你这样做:

FlowPanel fPanel = new FlowPanel() {
      @Override
      public void onAttach() {
           super.onAttach();
           super.addDomHandler(handler, ClickEvent.getType());  // handler is the instance         
                                                                // of your ClickHandler
      }
}
Run Code Online (Sandbox Code Playgroud)

干杯!!!


Nic*_*ans 6

我找到的最佳解决方案就在这里.

我们的想法是扩展FlowPanel(或实际上是SimplePanel)以实现相关的处理程序接口,这对于不需要FocusPanel的完整功能和焦点功能的情况来说是一个更简洁的选项.见下文:

public class MouseAwareFlowPanel extends FlowPanel implements 
HasMouseOverHandlers, HasMouseOutHandlers, HasClickHandlers 
{ 
    public HandlerRegistration addMouseOverHandler(MouseOverHandler handler) 
    { 
        return addDomHandler(handler, MouseOverEvent.getType()); 
    } 
    public HandlerRegistration addMouseOutHandler(MouseOutHandler handler) 
    { 
        return addDomHandler(handler, MouseOutEvent.getType()); 
    } 
    public HandlerRegistration addClickHandler(ClickHandler handler) 
    { 
        return addDomHandler(handler, ClickEvent.getType()); 
    } 
} 
Run Code Online (Sandbox Code Playgroud)


Chu*_*rro 5

这对我有用(显然,用你的点击处理器名称替换"你的CLICKHANDLER"):

FlowPanel field = new FlowPanel();

field.addDomHandler(YOUR CLICKHANDLER, ClickEvent.getType());
Run Code Online (Sandbox Code Playgroud)