GWT UiBinder:将鼠标处理程序添加到面板或网格

GWT UiBinder:将鼠标处理程序添加到面板或网格,gwt,grid,mouseevent,uibinder,Gwt,Grid,Mouseevent,Uibinder,我找不到将鼠标处理程序添加到GWT面板或网格的方法 在使用UiBinder时 我基本上需要一种能够在网格上检测以下内容的方法: 检测事件发生在哪个单元中 检测鼠标上升事件 检测鼠标按下事件 检测鼠标移出事件 检测鼠标悬停事件 我曾计划尝试将绝对面板覆盖在上面 网格的顶部。我可以在AbsolutePanel上检测到这些事件, 然后根据事件的位置,确定 如果不是AbsolutePanel,事件将在年发生 覆盖在网格顶部,然后相应地采取行动。我现在知道了 在以下方面对面板施加了完全相同的限制: 没有单

我找不到将鼠标处理程序添加到GWT面板或网格的方法 在使用UiBinder时

我基本上需要一种能够在网格上检测以下内容的方法:

  • 检测事件发生在哪个单元中
  • 检测鼠标上升事件
  • 检测鼠标按下事件
  • 检测鼠标移出事件
  • 检测鼠标悬停事件
  • 我曾计划尝试将绝对面板覆盖在上面 网格的顶部。我可以在AbsolutePanel上检测到这些事件, 然后根据事件的位置,确定 如果不是AbsolutePanel,事件将在年发生 覆盖在网格顶部,然后相应地采取行动。我现在知道了 在以下方面对面板施加了完全相同的限制: 没有单击处理程序,并且没有太多选项

    我只需要找到一种方法让上述事件在网格上运行。 你推荐什么?没有使用UiBinder,我使用的是DomHandler, 在UiBinder中似乎被禁用了(我错了吗?)

    非常感谢您的帮助。谢谢


    ~Scott

    您可以扩展网格,并让它实现适当的接口,如:

    public class ClickableGrid extends Grid implements HasMouseDownHandlers {
         ...
        public HandlerRegistration addMouseDownHandler(MouseDownHandler handler) {
            return addDomHandler(handler, MouseDownEvent.getType());
        }
    
    }
    
    然后在模板中使用它

    <my:ClickableGrid ui:field="clickableGrid">
    

    希望能有帮助

    …或者只需将
    网格
    放在
    聚焦面板内

    public class MouseGrid extends Composite {
    
        public MouseGrid() {
            Grid grid = new Grid(3, 3);
            for (int row = 0; row < 3; ++row) {
                for (int col = 0; col < 3; ++col) {
                    grid.setText(row, col, "" + row
                            + ", "
                            + col);
                }
            }
            FocusPanel panel = new FocusPanel();
            panel.setWidget(grid);
            initWidget(panel);
            panel.addMouseDownHandler(new MouseDownHandler() {
    
                @Override
                public void onMouseDown(MouseDownEvent event) {
                    Window.alert("mouse down");
                }
            });
        }
    }
    
    public类MouseGrid扩展复合{
    公鼠{
    网格=新网格(3,3);
    对于(int行=0;行<3;++行){
    用于(整数列=0;列<3;++列){
    grid.SETEXT(行,列,“+”行
    + ", "
    +col);
    }
    }
    FocusPanel面板=新FocusPanel();
    panel.setWidget(网格);
    初始化小部件(面板);
    panel.addMouseDownHandler(新的MouseDownHandler(){
    @凌驾
    MouseDown上的公共无效(MouseDownEvent事件){
    Window.alert(“鼠标按下”);
    }
    });
    }
    }
    
    public class MouseGrid extends Composite {
    
        public MouseGrid() {
            Grid grid = new Grid(3, 3);
            for (int row = 0; row < 3; ++row) {
                for (int col = 0; col < 3; ++col) {
                    grid.setText(row, col, "" + row
                            + ", "
                            + col);
                }
            }
            FocusPanel panel = new FocusPanel();
            panel.setWidget(grid);
            initWidget(panel);
            panel.addMouseDownHandler(new MouseDownHandler() {
    
                @Override
                public void onMouseDown(MouseDownEvent event) {
                    Window.alert("mouse down");
                }
            });
        }
    }