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

时间:2010-10-10 21:07:23

标签: gwt grid mouseevent uibinder

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

我基本上需要一种可以通过网格检测以下内容的方法:

  1. 检测事件正在发生的单元格。
  2. 检测鼠标注册事件
  3. 检测鼠标按下事件
  4. 检测鼠标输出事件
  5. 检测鼠标事件
  6. 我原本计划在覆盖绝对面板的情况下尝试这样做 网格顶部。我可以在AbsolutePanel上检测到这些事件, 然后根据事件的位置,确定哪个单元格 如果AbsolutePanel没有,那么事件就会发生 覆盖在网格顶部,然后相应地采取行动。我现在发现了 对于面板而言,完全相同的限制 点击处理程序,并没有很多选项。

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

    任何帮助都非常感谢。谢谢!

    ~Scott

2 个答案:

答案 0 :(得分:3)

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

public class ClickableGrid extends Grid implements HasMouseDownHandlers {
     ...
    public HandlerRegistration addMouseDownHandler(MouseDownHandler handler) {
        return addDomHandler(handler, MouseDownEvent.getType());
    }

}

然后在模板中使用它

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

并在拥有类

中添加处理程序
@UiHandler("clickableGrid")
    void handleClick(MouseDownEvent event) {
...
}

希望它有所帮助。

答案 1 :(得分:3)

...或只是将Grid放在FocusPanel

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");
            }
        });
    }
}