单击行时设置 CheckboxTreeViewer 的复选框

Set the checkbox of a CheckboxTreeViewer when the row is clicked

我正在寻找一种通用方法来在选中行/项目时检查 CheckBoxTreeViewer 的复选框。 我找到了关于 CheckBoxTableViewer 的 similar question,这个答案对我有帮助,但它不适用于 CheckBoxTreeViewer。我想,我必须使用 ISelectionChangedListener。

您可以添加一个 ISelectionChangedListener 并从 SelectionChangedEvent 接收选定的对象。然后你可以像这样设置这个对象的选中状态:

viewer.addSelectionChangedListener(new ISelectionChangedListener() {
        @Override
        public void selectionChanged(SelectionChangedEvent event) {
            Object selection = ((StructuredSelection)event.getSelection()).getFirstElement();
            viewer.setChecked(selection, true);
        }
    });

我通过调用CheckStateListener解决了灰色状态的问题,它负责维护元素的选中状态和灰色状态。

public void selectionChanged(final SelectionChangedEvent event) {
    Object selection = ((StructuredSelection) event.getSelection()).getFirstElement();
    if (selection != null) {
        boolean state = !checkboxTreeViewer.getChecked(selection);
        checkboxTreeViewer.setChecked(selection, state);
        checkboxTreeViewer.setSelection(StructuredSelection.EMPTY);
        checkStateListener.checkStateChanged(new CheckStateChangedEvent((ICheckable) event.getSource(), selection,
            state));
    }

}