前段時間我遇到了同樣的問題,我發現解決這個問題的唯一方法是在與表查看器關聯的SWT表部件上註冊一個鼠標偵聽器。
MouseListener columnSelectionMouseListener = new ColumnSelectionMouseListener();
getViewer().getTable().addMouseListener(columnSelectionMouseListener);
public class ColumnSelectionMouseListener implements MouseListener {
private TableColumn selectedColumn;
@Override
public void mouseDoubleClick(MouseEvent e) {
// Nothing to do here
}
@Override
public void mouseDown(MouseEvent e) {
table = (Table) e.widget;
TableItem item = table.getItem(new Point(e.x, e.y));
for (int i = 0; i < table.getColumnCount(); i++) {
TableColumn column = table.getColumn(i);
Rectangle bounds = item.getBounds(i);
if (bounds.contains(e.x, e.y)) {
selectedColumn = column;
}
}
}
@Override
public void mouseUp(MouseEvent e) {
// Nothing to do here
}
public TableColumn getSelectedField() {
return selectedColumn;
}
}
然後,例如在觀衆的選擇監聽器,你可以問到鼠標監聽器,列當鼠標被按下,並結合起來,與所選擇的線路從觀衆的選擇來進行適當的選擇行動。
希望這可以幫助。
馬努