我是SWT的新手。实际上,今天开始研究它。我有一个类型为CheckboxTableViewer的表。我想要做的是每当用户选择该行(即单击该行的任意位置)时,我都希望选中该复选框。目前,我在CheckboxTableViewer上有一个侦听器,如下所示:

diagnosesTableViewer.addCheckStateListener(new ICheckStateListener() {

        @Override
        public void checkStateChanged(CheckStateChangedEvent event) {

            Nomenclature changedStateNomenclature = (Nomenclature) event
                    .getElement();
            if (event.getChecked()) {
                selectedNomenclatures.add(changedStateNomenclature);
            } else {
                selectedNomenclatures.remove(changedStateNomenclature);
            }
        }

    });


我可以通过选中复选框来选择行。但是,即使用户通过单击任意列的该行的任意位置(而不是复选框)来选择该行,我也想选择该复选框。

我猜想对于addSelectionChangedListener,逻辑会在addSelectionChangedListener中的某个地方出现。但是我不确定该怎么做。谁能帮我这个?

最佳答案

使用此代码:将选择侦听器添加到表中。 ctv是您的CheckboxTableViewer的实例。

我还假设CheckboxTableViewer仅允许单选而不是多选。

ctv.getTable().addSelectionListener(new SelectionAdapter() {

  @Override
  public void widgetSelected(SelectionEvent e) {
      int df = ctv.getTable().getSelectionIndex();
      ctv.setChecked(ctv.getElementAt(df), !ctv.getChecked(ctv.getElementAt(df)));
  }
});

09-27 05:14