Почему Table.getItem(Point) всегда возвращает элемент из нулевого столбца?
-
21-08-2019 - |
Вопрос
Я реализовал класс, который дает мне более гибкую подсказку для класса 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 );
Где я ошибаюсь?
Решение
В конечном итоге ответ заключается в том, что 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;
}
Примечание:Rectangle.intersects( Point ) может дать сбой, если вы наведете курсор точно на края таблицы, поэтому вместо этого я использовал простое сравнение X.