【问题标题】:Set the checkbox of a CheckboxTreeViewer when the row is clicked单击行时设置 CheckboxTreeViewer 的复选框
【发布时间】:2016-10-19 00:25:51
【问题描述】:

I'm looking for a generic approach to check the checkbox of CheckBoxTreeViewer, when the row / the item is selected. 我找到了一个关于 CheckBoxTableViewer 的similar question,这个答案对我有帮助,但它不适用于 CheckBoxTreeViewer。我想,我必须使用 ISelectionChangedListener。

【问题讨论】:

    标签: java checkbox swt rcp


    【解决方案1】:

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

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

    【讨论】:

    • 这通常有效,但我遇到了多级树的问题,我使用的是“灰色”状态,如果一些子元素被选中而一些子元素没有被选中。
    【解决方案2】:

    我通过调用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));
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-24
      • 2011-08-30
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多