2008-12-12 8 views
0

Я реализовал класс, чтобы дать мне более гибкий tooptip для класса org.eclipse.swt.widgets.Table. Как я уверен, вы все знаете, по умолчанию вы получаете одну всплывающую подсказку для всей таблицы, а не отдельные подсказки для каждой ячейки.Почему Table.getItem (Point) всегда возвращает элемент из нулевого столбца?

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

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

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

Где я буду неправильно?

ответ

3

Ответ, в конце концов, что 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 вместо.

 Смежные вопросы

  • Нет связанных вопросов^_^