¿Por qué Table.getItem (punto) siempre devuelven el elemento de la columna cero?

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

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

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top