Почему Table.getItem(Point) всегда возвращает элемент из нулевого столбца?

Я реализовал класс, чтобы дать мне более гибкую подсказку для класса org.eclipse.swt.widgets.Table. Я уверен, вы все знаете, что по умолчанию вы получаете одну всплывающую подсказку для всей таблицы, а не отдельные подсказки для каждой ячейки.

Мой объект создает несколько слушателей для реализации своей собственной всплывающей подсказки, чувствительной к местоположению, однако, когда я вызываю Table.getItem(Point), чтобы получить TableItem (или ячейку), над которой зависает мышь, он всегда возвращает ячейку из столбца 0 из правильный ряд.

Рассматриваемая таблица создается TableViewer с этим заклинанием...

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

Где я ошибаюсь?


person Martin Cowie    schedule 12.12.2008    source источник


Ответы (1)


В конце концов, ответ заключается в том, что TableItem представляет собой строку, а не ячейку внутри строки. Этот маленький метод извлечет для вас номер столбца...

/**
 * 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 ) может дать сбой, если вы наведете курсор точно на края таблицы, поэтому вместо этого я использовал простое сравнение X.

person Martin Cowie    schedule 16.12.2008