Pregunta

No se puede encontrar una manera de agregar un controlador de ratón a un panel de GWT o una cuadrícula durante el uso de UiBinder.

Yo, básicamente, necesitamos una manera que puedo detectar lo siguiente sobre una cuadrícula:

  1. Detectar qué células del evento que está ocurriendo en.
  2. Detectar Ratón soltado Evento
  3. Detectar Ratón pulsado Evento
  4. Detectar ratón fuera de eventos
  5. Detectar mouse Evento

Yo había planeado para tratar de hacer esto con el panel sobrepuesto en absoluto superior de la rejilla. Podría detectar estos eventos en el AbsolutePanel, a continuación, con sede fuera de la ubicación del evento, lo que determinará la célula caso habría tenido lugar en el había AbsolutePanel no han sido superpuesto en la parte superior de la parrilla, y luego actuar en consecuencia. Ahora me entero que exactamente el mismo se imponen restricciones sobre los paneles en términos de clic manipuladores, y no tienen muchas opciones.

Yo sólo tiene que encontrar una manera de conseguir los acontecimientos anteriores a trabajar en la cuadrícula. ¿Qué recomendarías? No usar UiBinder, yo estaba usando DomHandlers, que parecen estar deshabilitado en UiBinder (me equivoco?).

Cualquier ayuda es muy apreciada. Gracias!

~ Scott

¿Fue útil?

Solución

Se podría extender de red y tener que implementar interfaces apropiadas como:

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

}

y luego usarlo en la plantilla

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

y manejador de complemento en la posesión de la clase

@UiHandler("clickableGrid")
    void handleClick(MouseDownEvent event) {
...
}

Espero que ayuda.

Otros consejos

... o simplemente coloque el Grid dentro de un 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");
            }
        });
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top