Pourquoi Table.getItem (point) retourne toujours l'élément de la colonne zéro?

StackOverflow https://stackoverflow.com/questions/362336

  •  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?

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top