单击行时设置 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));
}
}
我正在寻找一种通用方法来在选中行/项目时检查 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));
}
}