Очистка содержимого SWT-CheckboxTableViewer - PullRequest
0 голосов
/ 29 августа 2018

Я реализовал, как показано ниже.

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 голосов
/ 29 августа 2018

Когда вы используете средства просмотра таблиц 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();
  });
...