我找不到将鼠标处理程序添加到GWT面板或网格的方法 使用UiBinder时。
我基本上需要一种可以通过网格检测以下内容的方法:
我原本计划在覆盖绝对面板的情况下尝试这样做 网格顶部。我可以在AbsolutePanel上检测到这些事件, 然后根据事件的位置,确定哪个单元格 如果AbsolutePanel没有,那么事件就会发生 覆盖在网格顶部,然后相应地采取行动。我现在发现了 对于面板而言,完全相同的限制 点击处理程序,并没有很多选项。
我只需要找到一种方法让上述事件在Grid上运行。 你会推荐什么?不使用UiBinder,我使用的是DomHandlers, 似乎在UiBinder中被禁用了(我错了吗?)。
任何帮助都非常感谢。谢谢!
~Scott
答案 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");
}
});
}
}