2011-05-13 4 views
7

Dans GWT, j'utilise CellTable.Comment changer la souris en surbrillance?

Lorsque vous passez la souris sur le CellTable, il met en surbrillance chaque ligne.

Comment modifier le comportement de la surbrillance de la souris sur? Plus précisément:

  • changer la couleur de mettre en évidence
  • activation/désactivation
  • en font ressortir que l'élément de grille spécifique à votre curseur (au lieu de la ligne entière)

(Le hack que j'ai actuellement est de créer un groupe de CellTables de 1 colonne et de les ajouter à une disposition VerticalPanel ... créant l'illusion qu'il y a un CellTable et il met en évidence chaque grille en fonction de votre curseur. Est-ce mauvais? Pourquoi? performance?)

Répondre

17

Vous remarquerez que le CellTable utilise un ResourceBundle, ce qui signifie que tous les styles CSS se brouillées ... ce qui rend plus difficile de passer outre les styles.

Le constructeur CellTable vous permettra réellement de remplacer le ResourceBundle par défaut. Donc d'abord, vous devez créer votre propre ensemble de ressources comme ceci:

public interface CellTableResources extends Resources { 

     public CellTableResources INSTANCE = 
       GWT.create(CellTableResources.class); 

     /** 
     * The styles used in this widget. 
     */ 
     @Source("CellTable.css") 
     CellTable.Style cellTableStyle(); 
} 

Ensuite, vous devez créer votre propre fichier CSS. Je recommande de copier le style CellTable directement dans votre projet et de l'utiliser comme point de départ.Vous pouvez le trouver ici: http://code.google.com/p/google-web-toolkit/source/browse/trunk/user/src/com/google/gwt/user/cellview/client/CellTable.css

Assurez-vous que le style est injecté d'abord, puis vous nourrir juste dans le constructeur de la CellTable comme ceci:

CellTableResources.INSTANCE.cellTableStyle().ensureInjected(); 
    myCellTable = new CellTable<T>(Integer.MAX_VALUE,CellTableResources.INSTANCE); 

Plus précisément, vous aurez envie de modifier ces styles :

  • cellTableKeyboardSelectedRow
  • cellTableKeyboardSelectedRowCell
  • c ellTableSelectedRow
  • cellTableSelectedRowCell
  • cellTableKeyboardSelectedCell

Il est important de noter que la table de cellule établit une distinction entre la 'ligne sélectionnée' et la «ligne sélectionnée du clavier. La ligne sélectionnée est la ligne sélectionnée (c'est-à-dire via SelectionModel). La ligne sélectionnée au clavier fait référence à ce qui est en surbrillance lorsque l'utilisateur appuie sur la touche haut/bas, mais ne signifie pas que la ligne est réellement sélectionnée (si cela a du sens).

+1

Une précision, je vous recommande de copier le style CellTableBasic.css et de l'utiliser comme référence: http://code.google.com/p/google-web-toolkit/source/browse/trunk/user/src/com /google/gwt/user/cellview/client/CellTableBasic.css ... la feuille de style CellTable.css standard inclut des ressources d'image, le CellTableBasic.css est un css pur et probablement plus facile à modifier –

+1

+1 pour votre dernier paragraphe où vous expliquez différence entre 'ligne sélectionnée' et 'ligne sélectionnée au clavier'. c'est la première fois que je l'ai vu expliqué – Justin

+0

Comment cela aide-t-il à supprimer la surbrillance actuelle? J'ai essayé de surcharger tous les styles mentionnés (y compris ceux non mentionnés 'cellTableHoveredRow' et' cellTableHoveredRowCell'), mais je ne peux pas faire disparaître complètement la surbrillance. Je peux le changer un peu, donc ça a l'air différent, mais je ne peux pas l'enlever. Peut-être que quelqu'un pourrait partager le CSS réel pour supprimer la mise en évidence sur la souris sur les lignes? Merci. – joscarsson

1
  1. CellTable peut être appelée via CSS: How do I style a gwt 2.1 CellTables headers?

  2. Pour désactiver la surbrillance situé juste à la propriété CSS hover à rien.

  3. Eventuellement - essayez de peaufiner les codes .cellTableSelectedRow et .cellTableSelectedRowCell.

Voici le CellTable.css d'origine: http://www.google.com/codesearch/p?hl=en#A1edwVHBClQ/user/src/com/google/gwt/user/cellview/client/CellTable.css&q=cellTableLastColumn&d=8

+0

Pourriez-vous s'il vous plaît fournir quelques détails sur la façon de faire le numéro 2 sur votre liste, "il suffit de définir la propriété CSS hover à rien"? Où dois-je définir cette propriété, sur quelle classe CSS, etc.? Merci. – joscarsson

4

Je vais juste ajouter pour le numéro 2) sur votre liste, vous pouvez simplement faire

cellList.setSkipRowHoverStyleUpdate(true) 

qui désactive complètement mettre en évidence. Il y a aussi deux autres fonctions setSkip sur CellList liées au survol.

Questions connexes