2011-04-26 19 views
13

He creado una CellTable básica y la he llenado con algunos datos. Ahora quiero agregar un clickHandler a cada fila, pero no estoy seguro de cómo hacerlo. Creé un evento de clic para toda la tabla, pero quiero uno para cada fila.¿Agregar clickHandler a la fila en CellTable en GWT?

table.sinkEvents(Event.ONCLICK); 
    table.setTitle("Click me"); 
    table.setSize("600px", "600px"); 
    table.addDomHandler(new ClickHandler() 
    { 
     @Override 
     public void onClick(ClickEvent event) 
     { 
      Window.alert("You clicked!" +); 

     } 
    }, ClickEvent.getType()); 

¿Puedo hacer algo similar para agregar clickEvent para cada fila?

Respuesta

27

Una CellTable tiene compatibilidad integrada para manejar eventos de clic. Puede agregar un CellPreviewHandler que se llamará entre otros cuando se haga clic en una fila. Recibirá una cantidad de elementos en el evento como el evento nativo, la celda y el valor de fila de datos. Como se activa no solo para los eventos de clic, debe verificar si se activó el evento de clic. Simplemente pruebe el evento pasado: boolean isClick = "click".equals(event.getNativeEvent().getType()).

Otra opción es ampliar el método protegido doSelection, pero está en desuso y debe asegurarse de que tiene el KeyboardSelectionPolicy configurado para asegurarse de que se invoca cuando se hace clic. Consulte para este último en JavaDoc de la interfaz KeyboardSelectionPolicy.

+0

Gracias! Funciona perfecto. – gusper

+3

Creo que debería considerar usar BrowserEvents.CLICK en lugar de "hacer clic". –

+1

'BrowserEvents' solo está disponible desde GWT 2.5.0 –

18

Otra manera de tener una celda seleccionada se puede realizar utilizando un NoSelectionModel y añadirlo a la tabla:

//EDIT: this is a field, not a local variable 
TheCellObject clickedObject; //the object selected by selectionModel 

final NoSelectionModel<TheCellObject> selectionModel = new NoSelectionModel<TheCellObject>(); 

    selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() { 

       @Override 
       public void onSelectionChange(SelectionChangeEvent event) { 
        clickedObject = selectionModel.getLastSelectedObject(); 
       } 
      }); 
cellTable.setSelectionModel(selectionModel); //add selection model to your celltable 
+0

¿cómo se puede acceder a la referencia no final 'clickedObject' dentro de una clase interna? ¿Cómo puedes mutarlo? tu código parece incorrecto – nakhli

+0

¡Eso es exactamente lo que necesitaba y absolutamente correcto! – membersound

+0

@Noya cool gracias – nakhli

Cuestiones relacionadas