清除 SWT-CheckboxTableViewer 的内容

Clearing the contents of SWT-CheckboxTableViewer

我已经实现了,如下所示。

我面临的问题是清除 CheckboxTableViewer 的内容,现在我正在跟踪 CheckboxTableViewer 中存在的项目,然后删除第 0 个元素,但是当用户在列出非常迅速。

list= new org.eclipse.swt.widgets.List(container, SWT.CHECK | SWT.FULL_SELECTION | SWT.VIRTUAL);
list.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL));

复选框代码

table = new Table(container, SWT.CHECK | SWT.FULL_SELECTION | SWT.VIRTUAL);
table.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL));
table.setHeaderVisible(true);
checkboxTableViewer = new CheckboxTableViewer(table);

在侦听器中,我尝试获取 table 并清除 table 但这不起作用。

checkboxTableViewer .getTable().clearAll();

请让我知道如何进行。

更新代码

package com.checkagain.importWizards;


public class PageTwo extends WizardPage {
    private Text text1;
    private Composite container;

    org.eclipse.swt.widgets.List single;
    Table table ;
    CheckboxTableViewer checkboxTableViewer;
    List elementList= new ArrayList();



    public PageTwo() {
        super("PageTwo");
        setTitle("PageTwo");
        setDescription("Fake Wizard: PageTwo");
        elementList.add("1"); 
        elementList.add("2");
        elementList.add("3");

        elementList.add("4");
        elementList.add("5");
        elementList.add("6");

    }

    @Override
    public void createControl(Composite parent) {
        container = new Composite(parent, SWT.NONE);
        GridLayout layout = new GridLayout();
        container.setLayout(new FillLayout());
        layout.numColumns = 2;


        single= new org.eclipse.swt.widgets.List(container, SWT.CHECK | SWT.FULL_SELECTION | SWT.VIRTUAL);
        single.add("one");
        single.add("two");

        single.add("three");
        single.add("four");

        single.add("five");
        single.add("six");
        //single.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL));
        //////Code for Check Box


         table = new Table(container, SWT.CHECK | SWT.FULL_SELECTION | SWT.VIRTUAL);
         //table.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL));
        table.setHeaderVisible(true);
        checkboxTableViewer = new CheckboxTableViewer(table);

        single.addSelectionListener(new SelectionListener() {

            @Override
            public void widgetSelected(SelectionEvent arg0) {
                // TODO Auto-generated method stub

                //additional code added on suggestion
                checkboxTableViewer.setInput(new String[0]);
                checkboxTableViewer.refresh();              

                checkboxTableViewer.add(elementList.get(single.getSelectionIndex()));
            }

            @Override
            public void widgetDefaultSelected(SelectionEvent arg0) {
                // TODO Auto-generated method stub

            }
        });


        setControl(container);
        setPageComplete(true);
    }

    public String getText1() {
        return text1.getText();
    }
}

当您使用 JFace table 查看器时,您应该避免访问底层 Table - table 查看器会管理它。

您还指定了 SWT.VIRTUAL 标志 - tables 与此标志的行为非常不同,它仅对大 tables 有用。

您可以清除查看器,方法是使用 setInput 将 table 查看器输入设置为空数组,或者将您的内容提供程序 return 设为空元素数组并调用 refresh - 一个简单的例子:

CheckboxTableViewer checkboxTableViewer = CheckboxTableViewer.newCheckList(shell, SWT.FULL_SELECTION | SWT.BORDER);

checkboxTableViewer.setContentProvider(ArrayContentProvider.getInstance());
checkboxTableViewer.setLabelProvider(new LabelProvider());

final List<String> input = new ArrayList<>();
input.add("entry 1");
input.add("entry 2");
input.add("entry 3");

checkboxTableViewer.setInput(input);

Button clear = new Button(shell, SWT.PUSH);
clear.setText("Clear");

clear.addListener(SWT.Selection, event ->
  {
    input.clear();

    checkboxTableViewer.refresh();
  });