清除SWT-CheckboxTableViewer的内容

时间:2018-08-29 13:36:14

标签: eclipse-plugin swt eclipse-rcp jface

我已经实现了如下所示。

enter image description here

我所面临的问题是清除CheckboxTableViewer的内容,现在我要跟踪CheckboxTableViiewer中存在的项目,然后删除第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);

在侦听器中,我尝试获取该表并清除该表,但这没有用。

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();
    }
}

1 个答案:

答案 0 :(得分:1)

使用JFace表查看器时,应避免访问基础表-由表查看器进行管理。

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

您可以通过使用setInput将表查看器输入设置为空数组或使内容提供者返回空元素数组并调用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();
  });