Я пытаюсь программным образом определить, когда пользователь щелкнул флажок в CheckboxTreeViewer, и когда он нажал на фактический объект в дереве (т. Е. Элемент, отображаемый непосредственно справа от checkbox)Дифференциация между CheckboxTreeViewers CheckStateListener и Selection Listener
Чтобы определить, когда флажок установлен или снят флажок, я использую CheckStateListener. Это работает так, как ожидалось.
Чтобы определить, был ли объект нажат, я попытался использовать как приемник выбора, так и прослушиватель mousedown. Обе записи указывают, что объект был нажат, как и ожидалось. Однако они также записываются, когда флажок установлен или снят. Я не могу сказать, какое действие (щелкнув по флажку или нажав на объект) заставил слушателя стрелять.
Есть ли лучший способ определить, на что нажал пользователь?
Спасибо!
EDIT. Это текущий код, я тестирование с (добавлено к событию SWT.MouseDown):
private Listener getTestListener() {
return new Listener() {
@Override
public void handleEvent(final Event event) {
final ViewerCell vc = treeViewer.getCell(new
Point(event.x, event.y));
if (vc != null) {
IStructuredSelection selection =
(IStructuredSelection)treeViewer.getSelection();
Object selObj = selection.getFirstElement();
final Object element = vc.getElement();
// When I click on the checkbox or on the item
// to the right of it, the selObj and element
// Objects are always the same
}
}
};
}
Также протестирована с Select: . TreeViewer.getTree() addSelectionListener (getTestListener2()); ...
private SelectionListener getTestListener2() {
return new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent e) {
IStructuredSelection selection = (IStructuredSelection)treeViewer.getSelection();
Object selObj = selection.getFirstElement();
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
}
};
}
Который также дал те же результаты, между е и selObj
UPDATE:
я должен был сделать ужасающую обходной путь, где я получаю значение event.x, уровень узел дерева и выполнить математическую задачу, специфичную для ОС, чтобы определить, была ли указатель мыши над флажком или нет. Я хочу, чтобы был лучший способ ...
одна вещь, которая поможет является анализ исходного объекта события от события действия. – swingMan
Я сделал это через отладчик, и я не могу найти соответствующую информацию. Есть ли у вас какие-либо особенности, о которых вы можете знать? – ekjcfn3902039