单击其复选框时,CheckboxTableViewer不会更改表行的焦点

时间:2014-10-09 15:40:57

标签: java checkbox swt jface

嗨,我对SWT比较陌生。我正在使用CheckboxTableViewer。我有一个听众:

diagnosesTableViewer.getTable().addSelectionListener(new SelectionListener() {

        @Override
        public void widgetSelected(SelectionEvent e) {
            int nomenclatureSelectionIndex = diagnosesTableViewer
                    .getTable().getSelectionIndex();
            Nomenclature checkedNomenclature = (Nomenclature) diagnosesTableViewer
                    .getElementAt(nomenclatureSelectionIndex);
            diagnosesTableViewer.setChecked(checkedNomenclature,
                    !diagnosesTableViewer
                            .getChecked(checkedNomenclature));
        }

当我点击表格行(除了复选框之外的任何地方)时,一切都按预期工作。但是当我专门点击复选框时,我也取消选中之前选中的行的复选框。我认为这是因为当我点击复选框时,它不会将焦点更改为新行,因此在旧的,先前选择的行itlsef和我选择的复选框的新行上调用侦听器,其侦听器永远不会被召唤。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

使用CheckboxTableViewer.addCheckStateListener添加ICheckStateListener来处理点击的复选框。

viewer.addCheckStateListener(new ICheckStateListener() {
        @Override
        public void checkStateChanged(CheckStateChangedEvent event) {
            // event.getChecked() is the check state
            // event.getElement() is element being checked/unchecked
        }
    });

您可以使用

选择事件中单击的行
viewer.setSelection(new StructuredSelection(event.getElement()));

使用

IStructuredSelection selection = (IStructuredSelection)viewer.getSelection();

获取现有选择。

相关问题