2010-10-10 14 views
2

Je ne trouve pas un moyen d'ajouter un gestionnaire de souris à un panneau GWT ou à une grille lors de l'utilisation d'UiBinder.GWT UiBinder: Ajout d'un gestionnaire de souris au panneau ou à la grille

J'ai besoin essentiellement d'une manière que je peux détecter les éléments suivants sur une grille.

  1. Detect ce que la cellule de l'événement se passe dans
  2. détecter la souris jusqu'à l'événement
  3. Détection événement de souris vers le bas
  4. détecter la souris hors événement
  5. souris sur l'événement détecter

J'avais prévu d'essayer et de le faire avec le panneau absolu superposé sur haut de la grille. Je pouvais détecter ces événements sur le AbsolutePanel, puis en fonction de l'emplacement de l'événement, déterminer à quelle cellule l'événement aurait eu lieu si le panneau AbsolutePanel n'avait pas été superposé au-dessus de la grille, puis agir en conséquence. Je découvre maintenant que les restrictions exactes sont placées sur les panneaux dans les termes des gestionnaires de clic, et n'ont pas beaucoup d'options.

J'ai juste besoin de trouver un moyen de faire fonctionner les événements ci-dessus sur la grille. Que recommanderiez-vous? N'utilisant pas UiBinder, j'utilisais DomHandlers, qui semble être désactivé dans UiBinder (ai-je tort?).

Toute aide est très appréciée. Merci!

~ Scott

Répondre

3

Vous pouvez étendre la grille et avoir d'implémenter des interfaces appropriées comme:

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

} 

puis l'utiliser dans le modèle

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

et gestionnaire ajouter à posséder la classe

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

J'espère que ça aide.

3

... ou simplement placer le Grid dans 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"); 
      } 
     }); 
    } 
}