Comment ajouter un écouteur de ligne à une ligne spécifique, ou à toutes les lignes d'une table? J'ai besoin d'ajouter un type d'écouteur "onMouseOver" aux lignes de sorte que lorsque vous les survolez, cela change la couleur d'arrière-plan de la ligne, un peu comme getRowFormatter vous le permettra.Comment ajouter un écouteur de ligne à un Flextable dans GWT?
Répondre
Supposant GWT 1.5.3:
EVENEMENT CLIQUEZ MANIPULATION
Si vous utilisez FlexTable
et que vous voulez un gestionnaire d'événements de clic, vous pouvez utiliser le FlexTable.addTableListener()
et enregistrer votre propre TableListener
. L'objet TableListener
devra implémenter le rappel onCellClicked
qui vous donnera le numéro de ligne.
AUTRES EVENEMENTS DE MANUTENTION (par exemple FLOTTANT)
Si vous devez gérer d'autres types d'événements autres que la souris (par exemple, vol stationnaire), GWT ne contient pas encore une interface prête pour cela. Vous êtes pratiquement parti seul pour les implémenter vous-même. Il y a deux façons de le faire que je peux penser maintenant:
La façon rapide et sale, est probablement en exploitant JSNI, qui fournit un moyen pour vous injectez Javascript dans votre code GWT. Je n'ai pas utilisé beaucoup de JSNI (mis à part des solutions de contournement vraiment dures qui ne valent pas l'effort de l'écrire en GWT pur) dans mon code, donc je ne peux pas vous montrer un exemple; mais franchement, je ne le recommanderai pas car cela réduit la maintenabilité et l'extensibilité.
Si vous vouliez une interface GWT native, vous pouvez créer une nouvelle classe qui hérite de HTMLTable ou de FlexTable. Au constructeur, appelez la fonction
sinkEvents
avec vos événements nécessaires. (par exemple, pour le vol stationnaire, vous aurez probablement besoin de sinkEvents (Event.ONMOUSEOVER)). Ensuite, vous aurez besoin de la fonction onBrowserEvent qui gère le passage de la souris.Un modèle rapide de la façon dont le code devrait ressembler à:
import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.Event; import com.google.gwt.user.client.ui.FlexTable; public class FlexTableWithHoverHandler extends FlexTable { public FlexTableWithHoverHandler() { super(); sinkEvents(Event.ONMOUSEOVER); } @Override public void onBrowserEvent(Event event) { switch(DOM.eventGetType(event)) { case Event.ONMOUSEOVER: // Mouse over handling code here break; default: break; } } }
Le meilleur d'apprendre à coder c'est en regardant le code source GWT lui-même (recherche
sinkEvent
) et obtenir la sensation sur la façon dont pour le faire la façon GWT.
// this is click
final FlexTable myTable = new FlexTable();
myTable.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
Cell cell = myTable.getCellForEvent(event);
int receiverRowIndex = cell.getRowIndex(); // <- here!
}
});
changer "usersTable" à "myTable" et vous avez une bonne solution. –
je l'ai trouvé beaucoup plus simple d'ajouter javascript directement à l'élément TR. Mon code suppose qu'un parent DOM de widgets est un TD et le grand-parent est le TR, donc vous devez être sûr de connaître votre DOM.
Voici mon code. Sympa et simple, pas de gestion d'événements JSNI ou GWT DOM requise.
TableRowElement rowElement = (TableRowElement) checkbox.getElement(). GetParentElement(). GetParentElement();
rowElement.setAttribute ("onMouseOver", "this.className = '" + importRecordsResources.css(). NormalActive() + "'");
rowElement.setAttribute ("onMouseOut", "this.className = '" + importRecordsResources.css().normal() + "'");
Je viens de le faire de cette façon simple:
protected void handleRowsSelectionStyles(ClickEvent event) {
int selectedRowIndex = fieldTable.getCellForEvent(event).getRowIndex();
int rowCount = fieldTable.getRowCount();
for (int row = 0; row < rowCount; row++) {
Element rowElem = fieldTable.getRowFormatter().getElement(row);
rowElem.setClassName(row == selectedRowIndex ? "row selected" : "row");
}
}
Vous appelez cette méthode à partir des cellules que vous voulez être cliquable
int row = 0;
for (final RowDataProxy rowData : rowDataList) {
Label fieldName = new Label(rowData.name());
fieldName.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
handleRowsSelectionStyles(event);
}
});
fieldTable.setWidget(row++, 0, fieldName);
}
Cordialement,
Zied Hamdi
- 1. Comment ajouter un écouteur d'événement via Fluent NHibernate?
- 2. GWT: Création d'un FlexTable défilant en plein écran TabPanel
- 3. Comment accéder au JUnitCore actuel pour ajouter un écouteur?
- 4. Puis-je ajouter un écouteur d'événement à une action de liaison de données dans Flex?
- 5. Ajouter un séparateur de ligne à Gridview
- 6. Ajout d'un écouteur d'événement à un iframe
- 7. Ajout d'un écouteur de modification de taille à LayoutContainer
- 8. Ajouter un MouseOverHandler à un élément?
- 9. Comment ajouter MouseEvents à un AbsolutePanel?
- 10. C#: Comment ajouter une ligne à un mémo?
- 11. Comment puis-je remplacer un widget GWT dans un Panel?
- 12. comment ajouter une ligne vide dans un IQueryable?
- 13. Comment développer un widget GWT?
- 14. Arrêter un événement de bouillonnement dans GWT
- 15. Comment attacher un écouteur de trace à un processus en cours?
- 16. Ajout de resize listener/handler à VerticalPanel dans GWT
- 17. Comment ajouter un nombre à un Sqlcommand.Parameters?
- 18. Comment ajouter un CGImageRef à un NSDictionary?
- 19. comment ajouter un caractère supplémentaire à la fin de chaque ligne dans vim
- 20. Importation de classes Groovy dans un module GWT dans Intellij
- 21. Comment puis-je faire un script php ajouter un onglet à chaque ligne d'un fichier include?
- 22. Ajouter une ligne à une liste et un canevas
- 23. API Google Maps v3: comment supprimer un écouteur d'événements?
- 24. Ajout de widgets dynamiques à un panneau (GWT)
- 25. Comment ajouter un répertoire de classes java à un projet?
- 26. Comment ajouter un bouton à un DataGrid de structure compacte?
- 27. Comment ajouter un pilote ODBC à un environnement MAMP?
- 28. comment ajouter une ligne à datagridview
- 29. Comment puis-je ajouter des caractères à une ligne dans un fichier?
- 30. Comment ajouter un bouton d'édition à chaque ligne d'un rapport dans Oracle APEX?
Comment trouveriez-vous la rangée de la cellule qui est planée? Je peux trouver la cellule, mais pas comment appliquer le formateur de ligne à cette ligne qui contient la cellule. – Organiccat
Je l'ai, j'ai oublié de faire référence à la table, essayait de tirer la table parent de la cellule, oops: p – Organiccat