Debido a que la interfaz de CellPreview no capta de forma nativa acontecimientos doble clic necesitará añadir lógica evento en el método anulado onCellPreview. Primero, pensaría que la mejor manera sería verificar las diferencias de tiempo de clic. Sin embargo, es mucho más eficiente y elegante usar una máquina de estado y contar clics. Esto es más robusto y le permite lidiar con múltiples casos de eventos: como el mouse hover, single y double clicks. El código es bastante directo. ¡Así que Disfrutá!
public class CellHoverHandler implements Handler<T> {
Timer singleClickTimer;
int clickCount = 0;
int clickDelay = 300;
@Override
public void onCellPreview(final CellPreviewEvent<T> event) {
if (Event.getTypeInt(event.getNativeEvent().getType()) == Event.ONMOUSEOVER) {
handleOnMouseOver(event);
} else if (Event.getTypeInt(event.getNativeEvent().getType()) == Event.ONCLICK) {
clickCount++;
if (clickCount == 1) {
singleClickTimer = new Timer() {
@Override
public void run() {
clickCount = 0;
handleOnClick(event);
}
};
singleClickTimer.schedule(clickDelay);
} else if (clickCount == 2) {
singleClickTimer.cancel();
clickCount = 0;
handleOnDblClick(event);
}
}
}
private void handleOnMouseOver(CellPreviewEvent<T> event) {
Element cell = event.getNativeEvent().getEventTarget().cast();
GWT.log("mouse over event");
}
private void handleOnClick(CellPreviewEvent<T> event) {
Element cell = event.getNativeEvent().getEventTarget().cast();
GWT.log("click event");
}
private void handleOnDblClick(CellPreviewEvent<T> event) {
Element cell = event.getNativeEvent().getEventTarget().cast();
GWT.log("double click event");
}
OPTIMIZACIÓN: sentirse libre para pegar el recuento, el temporizador y retrasar miembros de la clase como estáticas o miembros globales para su reutilización. También verifique si el temporizador es nulo antes de hacer una nueva instancia. Había omitido esto por simplicidad. A diferencia de muchas otras técnicas, de esta manera todavía le proporciona acceso fácil y directo al evento celular. La técnica de sobrecargar el AbstractCell también funciona bien, sin embargo, a veces no tienes células personalizadas o quieres crear una celda personalizada para manejar eventos en la celda.
esta es una manera desordenada de hacer las cosas de la OMI, pero funciona –