¿Por qué Table.getItem (punto) siempre devuelven el elemento de la columna cero?
-
21-08-2019 - |
Pregunta
He implementado una clase que me diera una tooptip más flexible para la clase org.eclipse.swt.widgets.Table. Como estoy seguro que todos conocen, por defecto se obtiene una información sobre herramientas para toda la mesa -. Y no consejos individuales para cada celda
Mi objeto crea un número de oyentes a poner en práctica su propia ubicación sobre herramientas sensibles, sin embargo, cuando llamo Table.getItem (punto) para obtener el TableItem (o célula) sobre el cual esté el ratón siempre devuelve la celda de la columna 0 de la fila correcta.
El cuadro en cuestión es creado por un TableViewer con este encantamiento ...
viewer = new TableViewer( parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION );
Siempre que estoy haciendo mal?
Solución
La respuesta, en el extremo es que TableItem representa una fila, y no una célula dentro de una fila. Este método poco buscará el número de columna para usted ...
/**
* 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;
}
Nota:. Rectangle.intersects (punto) puede fallar si se pasa exactamente lo largo de los bordes de la mesa, así que he utilizado una simple comparación X en lugar