Perché Table.getItem (Point) restituisce sempre la voce dalla colonna pari a zero?

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

  •  21-08-2019
  •  | 
  •  

Domanda

Ho implementato una classe di darmi una tooptip più flessibile per la classe org.eclipse.swt.widgets.Table. Come sono sicuro che tutti voi sapete, per impostazione predefinita si ottiene uno suggerimento per l'intera tabella -. E non suggerimenti individuali per ogni cella

Il mio oggetto crea un certo numero di ascoltatori per implementare il proprio posizione tooltip sensibili, tuttavia, quando chiamo Table.getItem (Point) per ottenere la TableItem (o cella) su cui il mouse passa restituisce sempre la cella dalla colonna 0 della riga corretta.

La tabella in questione è stato creato da un TableViewer con questo incantesimo ...

viewer = new TableViewer( parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION );

Ovunque sto andando male?

È stato utile?

Soluzione

La risposta, alla fine è che TableItem rappresenta una riga, e non una cella all'interno di una riga. Questo metodo poco verrà recuperato il numero di colonna per te ...

/**
 * 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) può fallire se si passa esattamente sopra i bordi della tabella, quindi ho usato un semplice confronto X al posto

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top