【问题标题】:Set the checkbox of a CheckboxTableViewer when the row is clicked单击行时设置 CheckboxTableViewer 的复选框
【发布时间】:2014-10-09 15:21:57
【问题描述】:

我对 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。但我不知道该怎么做。谁能帮我解决这个问题?

【问题讨论】:

    标签: java checkbox swt actionlistener jface


    【解决方案1】:

    使用此代码:将选择侦听器添加到表中。 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)));
      }         
    });
    

    【讨论】:

    • 您可以使用SelectionAdapter 代替SelectionListener 以避免编码widgetDefaultSelected
    • 我遇到了这个问题。当我单击该行时,它按预期工作,但是当我单击复选框时,我不会从先前单击的行中移除焦点,因此它会更改该行的状态以及我正在单击的新行。有没有办法可以从先前选择的行中移除焦点并将其更改为我正在单击其复选框的行?
    • 通过添加表格查看器代码提出新问题。我无法正确理解。
    猜你喜欢
    • 2016-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    • 2011-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多