Pourquoi Table.getItem (point) retourne toujours l'élément de la colonne zéro?
-
21-08-2019 - |
Question
J'ai mis une classe pour me donner une tooptip plus souple pour la classe org.eclipse.swt.widgets.Table. Comme je suis sûr que vous le savez tous, par défaut, vous obtenez une info-bulle pour la table entière -. Et non des conseils individuels pour chaque cellule
Mon objet crée un certain nombre d'auditeurs à mettre en œuvre son propre emplacement infobulle sensible, cependant, quand je l'appelle Table.getItem (Point) pour obtenir le TableItem (ou cellule) sur laquelle la souris est en vol stationnaire, il retourne toujours la cellule de la colonne 0 sur la ligne correcte.
Le tableau en question est créé par un TableViewer avec ce ... incantatoire
viewer = new TableViewer( parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION );
Où vais-je tort?
La solution
La réponse, à la fin est que TableItem représente une rangée, et non pas une cellule dans une rangée. Cette petite méthode va chercher le numéro de colonne pour vous ...
/**
* Get the column from the given TableItem and Point objects
* @param pt
* @param item
* @return -1 if no column is found
*/
public static int getColumn( Point pt, TableItem item )
{
int columns = item.getParent().getColumnCount();
for (int i=0; i<columns; i++)
{
Rectangle rect = item.getBounds (i);
if ( pt.x >= rect.x && pt.x < rect.x + rect.width ) return i;
}
return -1;
}
NB:. Rectangle.intersects (Point) peut échouer si vous placez le curseur exactement sur les bords de la table, donc je l'ai utilisé une simple comparaison de X à la place