Pergunta

Eu tenho implementado uma classe para me dar uma tooptip mais flexível para a classe org.eclipse.swt.widgets.Table. Como eu tenho certeza que todos sabem, por padrão você começa uma dica de ferramenta para a tabela inteira -. E não dicas individuais para cada célula

Meu objetivo cria um número de ouvintes de implementar a sua própria localização dica sensível, no entanto, quando eu chamar Table.getItem (Point) para obter o TableItem (ou celular) sobre o qual o mouse está pairando ele sempre retorna a célula da coluna 0 da linha correta.

A tabela em questão é criado por um TableViewer com este encantamento ...

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

Onde estou indo errado?

Foi útil?

Solução

A resposta, no final é que TableItem representa uma linha, e não uma célula dentro de uma linha. Este método pouco vai buscar o número da coluna para você ...

/**
 * 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) pode falhar se você passar o mouse exatamente sobre as bordas da tabela, então eu usei uma comparação simples X em vez

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top