Añadiendo a clickHandler div que contiene muchas otras Reproductor
Pregunta
Parece que Grupo no hereda de HasClickHandlers y no puedo añadir un clickHandler a DivElement. ¿Hay alguna forma de añadir clickHandler a un DIV?
EDIT:. La razón por la que no puedo usar la etiqueta como que el DIV Quiero podrá hacer clic contiene otro DIV
Solución
Por defecto, 'sumidero' Panel anunciaron el evento onclick. Eso es, al hacer clic en los paneles doesnt realmente resulta en una 'ClickEvent' y por lo tanto la tampoco manejador despedido. Para eventos utilización clic en Panel (o para el caso cualquier otra Widget) primero debe invocar sinkEvents () sobre ella con los bits de eventos adecuados.
Por ejemplo:
SimplePanel p = new SimplePanel();
p.sinkEvents(Event.ONCLICK);
p.setTitle("Click me");
p.setSize("600px", "600px");
p.addHandler(new ClickHandler(){
@Override
public void onClick(ClickEvent event) {
Window.alert("SimplePanel clicked!");
}
}, ClickEvent.getType());
La pieza de código anterior primero 'permite' haga clic en eventos para la SimplePanel utilizando p.sinkEvents(Event.ONCLICK);
y luego se va a añadir clickHandler estándar en la misma. Tenga en cuenta que a pesar de que duerma SimplePanel implementar HasClickHandlers, siempre se puede agregar un controlador utilizando el método addHandler()
.
Otros consejos
Utilice el FocusPanel
.
Un panel simple que hace que su contenido enfocable, y añade la capacidad de captura de eventos de ratón y teclado.
public class ClickableDiv extends FlowPanel implements HasClickHandlers {
@Override
public HandlerRegistration addClickHandler(ClickHandler handler) {
return addDomHandler(handler, ClickEvent.getType());
}
}
Eso debería ser todo lo que necesita. addDomHandler
se hará cargo de "hundimiento" el tipo de evento para usted.