GWT UiBinder: добавление обработчика мыши в панель или сетку - PullRequest
2 голосов
/ 11 октября 2010

Я не могу найти способ добавить обработчик мыши на панель GWT или сетку при использовании UiBinder.

Мне в основном нужен способ, которым я могу обнаружить следующее по сетке:

  1. Определите, в какой ячейке происходит событие.
  2. Обнаружение события «Mouse Up»
  3. Обнаружение события отключения мыши
  4. Обнаружение события отсутствия мыши
  5. Обнаружение мыши над событием

Я планировал попытаться сделать это с абсолютной панелью, наложенной на верхняя часть сетки. Я мог обнаружить эти события на AbsolutePanel, затем, основываясь на месте события, определите, какая ячейка событие произошло бы, если бы не было AbsolutePanel накладывать поверх сетки, а затем действовать соответствующим образом. Теперь я узнаю что те же самые ограничения накладываются на панели с точки зрения обработчиков кликов, и у них не так много вариантов.

Мне просто нужно найти способ заставить вышеуказанные события работать в Grid. Чтобы вы посоветовали? Не используя UiBinder, я использовал DomHandlers, которые, похоже, отключены в UiBinder (я не прав?).

Любая помощь очень ценится. Спасибо!

~ Скотт

Ответы [ 2 ]

3 голосов
/ 14 октября 2010

... или просто поместите 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");
            }
        });
    }
}
3 голосов
/ 12 октября 2010

Вы можете расширить 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) {
...
}

Надеюсь, это поможет.

...